web-dev-qa-db-ja.com

forまたはwhileループがn回何かをする

Pythonでは、いくつかのアクションを複数回繰り返すための2つの素晴らしい方法があります。1つはwhileループで、もう1つはforループです。 2つの簡単なコードを見てみましょう。

for i in range(n):
    do_sth()

そしてもう一つ:

i = 0
while i < n:
    do_sth()
    i += 1

私の質問は、どちらが優れているかです。もちろん、ドキュメントの例やインターネット上で見つけることができるさまざまなコードで非常に一般的な最初のものは、はるかにエレガントで短いですが、一方でループするだけの完全に役に立たない整数のリストを作成しますそれら。特に大量の繰り返しに関する限り、それはメモリの浪費ではありませんか?

だからあなたはどう思いますか、どちらの方が良いですか?

27
Sventimir

しかし、一方で、それらをループするためだけに、完全に役に立たない整数のリストを作成します。特に大量の繰り返しに関する限り、それはメモリの浪費ではありませんか?

それがxrange(n)の目的です。数値のリストを作成せず、代わりに反復子オブジェクトを提供します。

Python 3、xrange()range()に名前が変更されました。リストが必要な場合は、list(range(n))で明示的に要求する必要があります。

39
Amber

xrangeオブジェクトを作成する必要がないため、これはint(およびwhileループ)よりも軽量です。また、Python2とPython3でも同等に機能します。

from itertools import repeat
for i in repeat(None, 10):
    do_sth()
15
John La Rooy

ほとんどのプログラミング言語の基本的な違いは、unless予期しないことが発生するということですforループは常に繰り返しn回、whileループで終了し、0 times, 1, more or even forever、各ループの開始時に常に真であり、ループの終了時に常に偽である特定の条件に応じて、(完全性のためにdo ... whileループ(またはrepeat until)、それを持つ言語の場合、常に少なくとも1回実行され、最初の実行時の条件は保証されません)。

だからあなたの質問への答えは 'それはあなたが何をしようとしているかに依存します'!

2
Steve Barnes