2010-12-14 19 views
4

私は単純な反復を行う最良の方法は何かを聞きたいと思います。 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 

おかげで非常に多くの

+0

私は最初のものを好む...私はそれが個人的な味の問題だと信じている – William

+0

最初のものはもっと慣用的です。 –

+0

"次のうちのどれがベストですか"? **あなたは「最高」の意味は何ですか? 「最高」を定義してください。 「最高」の定義がなければ、どちらかが良いかもしれません。確かに、これを行う方法はまだまだあります。あなたの "ベスト"の定義にもよるが、これが最善の方法かもしれない。 「最高」を定義してください。 –

答えて

4

最初は慣用と考えられます。 Python 2.xではrangeの代わりにxrangeを使用してください。パイソン2において

+0

+1は、(CPython実装では)ほとんど同じ正確な性能特性を持っています。 –

+0

はxrange()が常にrange()より優れていますか?いつxrange()の代わりにrange()を使うべきですか? – nos

+0

http://stackoverflow.com/questions/135041/should-you-always-favor-xrange-over-range – user225312

0

最初。整数はインタプリタではなく内部層で行われるためです。グローバル変数も1つ少なくなります。

4

ループは、より簡潔で読みやすいです。 whileループはPythonではほとんど使用されません(ただし、while Trueは例外です)。

ちょっとした慣用的なPython:範囲を指定して何回か何度も何度も何度もやってみようとしている場合は、カウンターの名前を「_」とするとよいでしょう。例:

for _ in range(1000): 
    # do something 1000 times 
+0

私は個人的にはループには '_'を使用しませんが、常に' i'、 'j'、' k'を使用します。対話型コンソールでは、 '_'が以前の結果であり、' _'がi18n(多くの場合、 '_' *がPythonの使い捨て変数として見なされるため、他の言語よりもはるかに少ない)で使用されます。 –

+0

@Chrisインタラクティブな通訳に同意しました。ローカリゼーションに関しては、私はそれをどの言語でも見たことがありません。 –

+0

'_( 'string')'が見つかりませんでしたか?これはgettextの一般的な使用パターンです。 –

4

、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(...))になります。

+0

私のシステムでは、 'range'は約13万要素まで多かれ少なかれ直線的に実行し続け、時間/ループ/反復で大きなジャンプをとり、悪化し続けています。 「xrange」は少なくとも1億要素までは止められず、2〜4億回の兆候のどこかで何らかの減速を見せ始めることしか期待していない。 ;) –

関連する問題