web-dev-qa-db-ja.com

Pythonで空のリストを作成する

Pythonで新しい空のリストを作成するための最良の方法は何ですか?

l = [] 

または

l = list()

私はこれを2つの理由で尋ねています:

  1. どちらが速いかについての技術的な理由。 (クラスを作成するとオーバーヘッドが発生しますか?)
  2. コードの読みやすさ - これは標準的な規則です。
204
user225312

どのコードが速いかをテストする方法は次のとおりです。

% python -mtimeit  "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop

% python -mtimeit  "l=list()"
1000000 loops, best of 3: 0.297 usec per loop

しかし、実際には、この初期化はプログラムのごく一部に過ぎない可能性が高いため、これを心配することはおそらく間違った方向に向かっています。

読みやすさは非常に主観的です。私は[]を好むが、Alex Martelliのような非常によく知られている人々の中には、 が発音可能な であるのでlist()を好む人もいます。

286
unutbu

list()は本質的に[]より遅いです。

  1. シンボルルックアップがあります(あなたが他の何かになるようにリストを再定義しなかったかどうかをPythonが前もって知ることはできません!)

  2. 関数呼び出しがあります、

  3. それからそれは渡された反復可能な引数があったかどうかをチェックする必要があります(それはそれから要素を持つリストを作成することができます)ps。私たちの場合はありませんが「if」チェックがあります

ほとんどの場合、速度の違いは実用的な違いはありません。

119
Nas Banov

私は[]を使います。

  1. リスト表記がショートサーキットだから速いです。
  2. リストを作成する with itemsは、リストを作成せずにリストを作成するのと同じように見えますが、どうして違いがあるのでしょうか。
14
Georg Schölly

私は実際にはそれについて知りませんが、経験上、jpcgtが実際に正しいということは私には思えます。次の例:次のコードを使用すると

t = [] # implicit instantiation
t = t.append(1)

インタプリタでは、tを呼び出すと、リストがなくても "t"だけが返されます。

t = t.append(2)

「NoneTypeオブジェクトには属性appendがありません」というエラーが表示されます。しかしながら、もし私がリストを作成するならば

t = list() # explicit instantiation

それからそれはうまくいきます。

2
Yinyue