2.6のPython集合の内包

アナンダン

2.6の集合の内包性を試していたところ、次の2つの方法に出くわしました。最初の方法は2番目の方法よりも速いと思いましたが、timeitそうでない場合提案されました。2番目のメソッドに追加のリストのインスタンス化とそれに続くセットのインスタンス化があるのに、なぜ2番目のメソッドの方が速いのですか?

方法1:

In [16]: %timeit set(node[0] for node in pwnodes if node[1].get('pm'))
1000000 loops, best of 3: 568 ns per loop

方法2:

In [17]: %timeit set([node[0] for node in pwnodes if node[1].get('pm')]) 
1000000 loops, best of 3: 469 ns per loop

ここでpwnodes = [('e1', dict(pm=1, wired=1)), ('e2', dict(pm=1, wired=1))]

Martijn Pieters

リスト内包表記を使用すると、反復が単純に高速になります。

In [23]: from collections import deque

In [24]: %timeit deque((node[0] for node in pwnodes if node[1].get('pm')), maxlen=0)
1000 loops, best of 3: 305 µs per loop

In [25]: %timeit deque([node[0] for node in pwnodes if node[1].get('pm')], maxlen=0)
1000 loops, best of 3: 246 µs per loop

deque反復速度を示すために使用されます。dequewithは、反復可能オブジェクトから取得されたすべての要素maxlen0破棄するよう設定されているため、結果を歪めるためのメモリ割り当ての違いはありません。

これは、Python 2では、リスト内包表記が個別の名前空間を使用しないのに対し、ジェネレーター式は使用するためです(必然的に使用する必要があります)。その余分な名前空間はスタック上に新しいフレームを必要とし、これはコストがかかります。ジェネレータ式の主な利点は、速度ではなく、メモリフットプリント低いことです。

Python 3では、リスト内包には別の名前空間もあり、リスト内包とジェネレーターの反復速度は同等です。また、Python 2でも最速の内包表記を設定しましたが、

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2段階でのPythonリスト内包

分類Dev

Pythonでの2つの行列の和集合

分類Dev

Python2の奇妙なリスト内包表記

分類Dev

1回の反復で2つの値を生成するpythonリスト内包

分類Dev

リスト内包表記の要素の「残り」を解凍する-python3to2

分類Dev

リスト内包表記で2番目の条件を使用するPythonの方法

分類Dev

Pythonリスト内包表記を使用した2次元配列の定義

分類Dev

Pythonリスト内包表記-2+シリーズの条件付き

分類Dev

2列のFrozenset和集合

分類Dev

Pythonでの2の累乗のリスト内包がnumpy配列で失敗する

分類Dev

最初の列による行ごとのPythonの2D配列の和集合

分類Dev

リスト内包Pythonの2つのforループをフレーム化する方法

分類Dev

リスト内包Pythonの2つのforループをフレーム化する方法

分類Dev

異なる範囲の2つの変数を使用してPythonリスト内包を試みます

分類Dev

Python:リスト内包表記。2つのリストを一意の値で1つに結合します

分類Dev

2 つの for ループ内の if ステートメントによる Python リスト内包表記

分類Dev

djangohaystackの2つのSearchQuerySetの和集合

分類Dev

リスト内包表記の2つの値

分類Dev

1つのリスト内包に別々に2つのforループ

分類Dev

2つのリストのリスト内包

分類Dev

Python 2、単純な場合のリスト内包表記と同等ではないマップ。長さに依存

分類Dev

Pythonリスト内包表記:各内部リストに2つの変数を入力します

分類Dev

リスト内包表記を使用した2D「ボード」の作成-Python3

分類Dev

2つのリストからPythonリスト内包表記を使用して辞書を作成する方法

分類Dev

Python-2つのforループとADDANDオペランドを含むリスト内包

分類Dev

2種類の和集合の使い方

分類Dev

2つのクエリの和集合

分類Dev

2D行列のリスト内包置換forループ

分類Dev

Forループへの2Dリスト内包

Related 関連記事

  1. 1

    2段階でのPythonリスト内包

  2. 2

    Pythonでの2つの行列の和集合

  3. 3

    Python2の奇妙なリスト内包表記

  4. 4

    1回の反復で2つの値を生成するpythonリスト内包

  5. 5

    リスト内包表記の要素の「残り」を解凍する-python3to2

  6. 6

    リスト内包表記で2番目の条件を使用するPythonの方法

  7. 7

    Pythonリスト内包表記を使用した2次元配列の定義

  8. 8

    Pythonリスト内包表記-2+シリーズの条件付き

  9. 9

    2列のFrozenset和集合

  10. 10

    Pythonでの2の累乗のリスト内包がnumpy配列で失敗する

  11. 11

    最初の列による行ごとのPythonの2D配列の和集合

  12. 12

    リスト内包Pythonの2つのforループをフレーム化する方法

  13. 13

    リスト内包Pythonの2つのforループをフレーム化する方法

  14. 14

    異なる範囲の2つの変数を使用してPythonリスト内包を試みます

  15. 15

    Python:リスト内包表記。2つのリストを一意の値で1つに結合します

  16. 16

    2 つの for ループ内の if ステートメントによる Python リスト内包表記

  17. 17

    djangohaystackの2つのSearchQuerySetの和集合

  18. 18

    リスト内包表記の2つの値

  19. 19

    1つのリスト内包に別々に2つのforループ

  20. 20

    2つのリストのリスト内包

  21. 21

    Python 2、単純な場合のリスト内包表記と同等ではないマップ。長さに依存

  22. 22

    Pythonリスト内包表記:各内部リストに2つの変数を入力します

  23. 23

    リスト内包表記を使用した2D「ボード」の作成-Python3

  24. 24

    2つのリストからPythonリスト内包表記を使用して辞書を作成する方法

  25. 25

    Python-2つのforループとADDANDオペランドを含むリスト内包

  26. 26

    2種類の和集合の使い方

  27. 27

    2つのクエリの和集合

  28. 28

    2D行列のリスト内包置換forループ

  29. 29

    Forループへの2Dリスト内包

ホットタグ

アーカイブ