私は単純な反復を行う最良の方法は何かを聞きたいと思います。 1000回繰り返してみたいと思いますが、どれがベストですか?それとも良い方法がありますか?Pythonの単純な反復
for i in range(1000):
do something with no reference to i
i = 0
while i < 1000:
do something with no reference to i
i += 1
おかげで非常に多くの
私は単純な反復を行う最良の方法は何かを聞きたいと思います。 1000回繰り返してみたいと思いますが、どれがベストですか?それとも良い方法がありますか?Pythonの単純な反復
for i in range(1000):
do something with no reference to i
i = 0
while i < 1000:
do something with no reference to i
i += 1
おかげで非常に多くの
最初は慣用と考えられます。 Python 2.xではrange
の代わりにxrange
を使用してください。パイソン2において
+1は、(CPython実装では)ほとんど同じ正確な性能特性を持っています。 –
はxrange()が常にrange()より優れていますか?いつxrange()の代わりにrange()を使うべきですか? – nos
http://stackoverflow.com/questions/135041/should-you-always-favor-xrange-over-range – user225312
最初。整数はインタプリタではなく内部層で行われるためです。グローバル変数も1つ少なくなります。
ループは、より簡潔で読みやすいです。 whileループはPythonではほとんど使用されません(ただし、while True
は例外です)。
ちょっとした慣用的なPython:範囲を指定して何回か何度も何度も何度もやってみようとしている場合は、カウンターの名前を「_
」とするとよいでしょう。例:
for _ in range(1000):
# do something 1000 times
私は個人的にはループには '_'を使用しませんが、常に' i'、 'j'、' k'を使用します。対話型コンソールでは、 '_'が以前の結果であり、' _'がi18n(多くの場合、 '_' *がPythonの使い捨て変数として見なされるため、他の言語よりもはるかに少ない)で使用されます。 –
@Chrisインタラクティブな通訳に同意しました。ローカリゼーションに関しては、私はそれをどの言語でも見たことがありません。 –
'_( 'string')'が見つかりませんでしたか?これはgettextの一般的な使用パターンです。 –
、Pythonの2.6
for i in range(1000):
pass
パフォーマンス数値を使用し、Pythonの3では
for i in xrange(1000):
pass
を使用:
$ python -s -m timeit '' 'i = 0
> while i < 1000:
> i += 1'
10000 loops, best of 3: 71.1 usec per loop
$ python -s -m timeit '' 'for i in range(1000): pass'
10000 loops, best of 3: 28.8 usec per loop
$ python -s -m timeit '' 'for i in xrange(1000): pass'
10000 loops, best of 3: 21.9 usec per loop
xrange
があるため、この場合にrange
に好ましいですリスト全体ではなくジェネレータを生成する[0, 1, 2, ..., 998, 999]
。それはあまりにも少ないメモリを使用します。実際にリストをまとめて作業する必要がある場合は、range
を使用します。通常はxrange
が必要です。そのため、Python 3ではxrange(...)
がrange(...)
になり、range(...)
がlist(range(...))
になります。
私のシステムでは、 'range'は約13万要素まで多かれ少なかれ直線的に実行し続け、時間/ループ/反復で大きなジャンプをとり、悪化し続けています。 「xrange」は少なくとも1億要素までは止められず、2〜4億回の兆候のどこかで何らかの減速を見せ始めることしか期待していない。 ;) –
私は最初のものを好む...私はそれが個人的な味の問題だと信じている – William
最初のものはもっと慣用的です。 –
"次のうちのどれがベストですか"? **あなたは「最高」の意味は何ですか? 「最高」を定義してください。 「最高」の定義がなければ、どちらかが良いかもしれません。確かに、これを行う方法はまだまだあります。あなたの "ベスト"の定義にもよるが、これが最善の方法かもしれない。 「最高」を定義してください。 –