Python> = 3.5の代替:リストリテラルに解凍 [*newdict]
新しい展開の一般化(PEP 448)がPython 3.5で導入され、簡単に実行できるようになりました。
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
でのアンパックは、反復可能な任意のオブジェクトで*
機能し、ディクショナリは反復されるときにキーを返すため、リストリテラル内で使用することにより、リストを簡単に作成できます。
.keys()
ieを追加する[*newdict.keys()]
と、関数の検索と呼び出しにコストがかかりますが、意図をもう少し明確にするのに役立ちます。(正直なところ、これは本当に心配する必要があることではありません)。
*iterable
構文はやってに似てlist(iterable)
、その振る舞いは、最初に文書化されたコールのセクション Pythonリファレンスマニュアルの。PEP 448では、*iterable
表示できる場所の制限が緩和され、リスト、セット、およびタプルリテラルにも配置できるようになりました。式リストのリファレンスマニュアルも更新され、これが記載されています。
list(newdict)
関数呼び出しが実際には実行されないため、(少なくとも小さな辞書では)高速であるという違いと同等ですが、
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
辞書が大きい場合でも、速度はほとんど同じです(大規模なコレクションを反復処理するオーバーヘッドが、関数呼び出しの小さなコストよりも優先されます)。
同様の方法で、タプルと辞書キーのセットを作成できます。
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
タプルの場合の末尾のコンマに注意してください!