私はPython 3.2.3を使用しています。逆にリストを反復する最も速い方法は何ですか? [:: - 1]、reverse、list.reverse()か他の方法でしょうか?私は約5e6要素程度のリストを扱っているので、リストをコピーすることを避ける必要があります。可能な限り逆順でPythonリストを反復処理する必要があります
答えて
>>> from timeit import Timer
>>> t = Timer('[x for x in l[::-1]]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
5.549649953842163
>>> t = Timer('l.reverse(); [x for x in l]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.548457145690918
>>> t = Timer('[x for x in reversed(l)]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.428632974624634
結論:逆転します() 100000項目のリストのl.reverse()よりわずかに速いです。 これは、リスト全体を実際にループしない場合はもちろん、リストを複数回使用すると真になりません。
l[::-1]
は、reversed()
を導入した旧式です。
reversed
は、イテレータを返すので、リストをコピーするのではなく、一度に1つの要素だけを返すので、ベストであるべきです。 (list.reverse()
もリストをコピーしませんが、それはそれを変異させますので、設定が完了した後reversed
は、元のリストを変更しないのに対し、リストは、逆方向になります。)
イテレータは必ずコピーを防止するわけではないことに注意してください。この場合、イテレータはうまく動作します。 –
これは本当ですが、一般的にイテレータを提供するビルトインのPython関数はリスト全体を一度に構築するものではありません。それが彼らの全ポイントです。 – BrenBarn
- 1. Python3の挿入ソートの逆順の反復処理がありません
- 2. LinkedList要素を逆順に反復処理する方法は?
- 3. Django移行エラー:エラー: 'choices'は反復可能(リストやタプルなど)である必要があります
- 4. Python: "'Nonetype'は反復処理なしで反復不可能です
- 5. javascriptで逆の順序でセットまたはマップを反復処理する方法はありますか?
- 6. Python TypeError: 'numpy.int32'オブジェクトが反復可能ではありません
- 7. Python - TypeError: 'NoneType'オブジェクトが反復可能ではありません
- 8. 反復処理がJSONリスト上のPython
- 9. 同じ要素に対して別の変更可能な反復の中の可変要素を反復処理する方法はありますか?
- 10. Pythonのリストでペアを反復処理し、反復
- 11. 反復処理リスト
- 12. 反復可能なアイテムをスキップするPythonの方法はありますか?
- 13. 'int'オブジェクトは反復可能ではありませんエラー:Python
- 14. python sqlite 'NoneType'オブジェクトは反復可能ではありません
- 15. TypeError: 'instancemethod'オブジェクトは反復可能ではありません(Python)
- 16. Python、TypeError: 'int'オブジェクトは反復可能ではありません
- 17. 非同期の反復処理にはprocess.nextTickまたはsetImmediateを使用する必要がありますか?
- 18. 可能な場合、NSMutableArrayを逆にする必要はありませんか?
- 19. ストリームが必要な場所で無効なオブジェクトを指定しました。あなたは、観察可能な、約束、アレイ、または反復処理可能
- 20. ハッシュで複数の要素を処理する可能性があります
- 21. 反復処理リストを作成する
- 22. リストを呼び出すと、反復可能オブジェクトが空になりますか?
- 23. LiferayのWebコンテンツマネージャで反復可能な要素を繰り返し処理できません
- 24. 'float'オブジェクトは反復可能なエラーではありません
- 25. decimal.Decimalは反復可能なエラーではありません
- 26. SSL_read()はSSL_ERROR_WANT_WRITEを処理する必要がありますか?
- 27. リストを反復処理中に要素を削除する効果はありますか?
- 28. なぜPythonのリストの理解は逆順になりますか?
- 29. keras - TypeError: 'int'オブジェクトが反復可能ではありません
- 30. TypeError:ManyRelatedManagerオブジェクトが反復可能ではありません
自分でテストしてください。 ['timeit'モジュール(http://docs.python.org/library/timeit.html)をチェックアウトすることをお勧めします。 –