54

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

for i in range(n):
    do_sth()

そして他の:

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

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

では、どの方法が良いと思いますか?

4

3 に答える 3

65

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

それがxrange(n)目的です。数値のリストを作成せず、代わりに iterator オブジェクトを提供するだけです。

Python 3 では、xrange()に名前が変更されました。range()リストが必要な場合は、list(range(n)).

于 2013-07-15T06:24:09.700 に答える
20

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

from itertools import repeat
for i in repeat(None, 10):
    do_sth()
于 2013-07-15T06:38:15.730 に答える
2

ほとんどのプログラミング言語の基本的な違いは、予期せぬ事態が発生しない限りfor、ループは常にn何度も繰り返されるか、break ステートメント (条件付きの場合があります) が満たされるまで繰り返され、特定の条件に応じてwhile繰り返されるループで終了することです。0 times, 1, more or even forever実行する各ループの開始時に true であり、ループを終了するときに常に false (完全を期すために、do ... whileループ (またはrepeat until)、ループを持つ言語の場合、常に少なくとも 1 回は実行され、最初の条件が保証されるわけではありません)実行)。

Python では、fororwhileステートメントにbreak, continueandelse ステートメントを含めることができることに注意してください。

  • break- ループを終了します
  • continue- 今回は次のコードを実行せずにループの次の回に進みます
  • elsebreak-ステートメントが実行されずにループが完了した場合に実行されます。

NB現在サポートされていないPython 2 では、range整数のリストが生成されましたがxrange、イテレータを使用するために使用できました。Python 3 ではrange、イテレータを返します。

したがって、あなたの質問に対する答えは、「すべてはあなたが何をしようとしているのかにかかっています」です!

于 2013-07-15T07:05:08.493 に答える