私はwhile
ループまたはfor
ループをPythonで使用する必要があるときに問題を発見しています。人々はfor
ループ(コード行が少ない?)を好んで使うようです。私はどちらか一方を使用すべき特定の状況はありますか?それは個人的な好みの問題ですか?私が今までに読んだコードは、それらの間に大きな違いがあると私に思いました。Pythonで "while"または "for"を使用する場合
答えて
はい、しばらくの間とするための大きな違いがあります。
のステートメントは、コレクションまたは反復可能なオブジェクトまたはジェネレータ関数を反復します。
ステートメントは、条件がFalseになるまで単純にループします。
好ましくないです。これは、あなたのデータ構造が何であるかの問題です。
多くの場合、処理する値をrange
(実際のリスト)またはxrange
(値を生成する)として表します。これにより、ステートメントのに合わせたデータ構造が得られます。
しかし、一般的には、セット、タプル、リスト、マップ、文字列などの既製のコレクションがあります。したがって、をループとして使用するだけです。
場合によっては、私たちのためにいくつかの機能プログラミング処理が行われることがあります。その場合、その変換を繰り返しの一部として適用できます。 sorted
およびenumerate
関数は、ステートメントの場合はと自然に適合するイテレートに変換を適用します。
繰り返し処理を行うための整然としたデータ構造がない場合、または処理を駆動するジェネレータ関数を持たない場合は、を入力し、を入力する必要があります。
for
は、より簡単で読みやすいため、リストを反復するためにはより多くの選択肢があります。例えば
この:
for i in range(11):
print i
がはるかに簡単かつこれよりも読みやすいです:
i = 0
while i <= 10:
print i
i = i + 1
だから、 'While'はPythonで廃止予定のものだと言えるでしょうか? – Fabio
@fabio ... not quite。 whileを使って合理的に書くことができるループがありますが、ほとんどの場合whileを優先して使用しようとするべきです。 –
while
は、ブレーク条件が論理的に任意の種類に依存しないシナリオで有用ですシーケンス。例えば、予測不可能な相互作用を考慮してください。もちろん
while user_is_sleeping():
wait()
を、あなたはそのアクションをカプセル化し、for
経由でアクセスできるように、適切なイテレータを書くことができる - しかし、どのようにそれが可読性が役立つであろうすべてで
を¹しました? Pythonの他のケースでは、for
(またはループをカプセル化する適切な上位関数)を使用します。
がuser_is_sleeping
機能がFalse
とき偽を返すと仮定¹、コード例は、以下for
ループのように書き換えることができる:
for _ in iter(user_is_sleeping, False):
wait()
問題がなく、好奇心の問題であれば、whileループを置き換えるfor文を書くことができると言っていましたが、どのように見えるでしょうか?ありがとう – Fabio
+1これも良い答えです。 –
forループは通常、反復が何をしているかを明確にします。常に直接使用することはできませんが、whileループを使用する反復ロジックをジェネレータ関数の中にラップすることができます。たとえば、次のように
def path_to_root(node):
while node is not None:
yield node
node = node.parent
for parent in path_to_root(node):
...
代わりの
parent = node
while parent is not None:
...
parent = parent.parent
まずPythonで、その他の言語のforループの間に違いがあります。 Pythonでは値のリスト(例:[4,3,2,7]の値)、他のほとんどの言語(C/C++、Java、PHPなど)を繰り返し処理しますが、whileループとして機能します。読むのが簡単です。
forループは、反復回数がわかっている場合(たとえば配列の長さ)、whileループが使用される時間がわからない場合に使用されます(たとえば、bubble sortループ値がソートされていない限り)
iterablesの処理を検討してください。コードのこれらのブロックの両方が根本的に基本的に同じ方法で同じことを行う
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
:
for i in mylist:
print i
それとも、あなたはwhile
ループでそれを行うことができます:あなたはfor
ループでそれを行うことができます。しかし、for
ループは反復子の作成と、StopIteration
例外の処理を隠すので、自分で処理する必要はありません。
私は、while
ループを使用して、イテレータに何らかの理由で直接アクセスする必要がある場合など、iterableを処理すると思います。いくつかの状況下でリスト内の項目をスキップする必要がありました。
リスト内の項目をスキップすることは、continueを使用して行うことができます。このスタイルのwhileループを使用する理由は、条件付きでループ内の次のアイテムを取得してから、ループの始めにやり直す場合です。 –
- 1. for/whileまたはwhileループを使用してスパイラルを作成する
- 2. &&と||を使用した場合の違いは何ですか? do ... whileループで?
- 3. whileループでforループを使用するタイミングは?
- 4. python copy.copyを使用する場合
- 5. 複数のfor-loopをpython while-loopで扱います
- 6. forまたはwhileを使用してPHPでこのコードをループすることはできますか?
- 7. mysql_fetch_arrayでwhileループを使用した場合の結果が遅い
- 8. デリゲートを使用する(または使用しない)場合
- 9. 条件またはforループがwebgridである場合
- 10. whileループを解除するには? Pythonの文字列型の場合
- 11. Javaで継承またはインタフェースを使用する場合?
- 12. GitでBundlerを使用する場合、https://またはgit:// better?
- 13. haproxyでhttpcloseまたはhttp-server-closeを使用する場合
- 14. PythonでOGR CreateField()を使用した場合のセグメンテーションフォールト(segfault)
- 15. Whileループで1 == 1またはtrueを使用する
- 16. Pythonで適切なtry関数を使用する場合
- 17. Pythonでexit whileループ
- 18. MySQLdbをPythonで使用する場合、skip-name-resolveオプションの使い方は?
- 19. rails 3つの未定義メソッド `events 'for nil:accepts_nested_attributes_forを使用する場合はNilClass
- 20. LinkedListまたはArrayListにHashMapを使用する場合、またはその逆の場合
- 21. シュリンクラップ、npm-ロックダウン、またはnpmシールを使用する場合
- 22. サーブレットまたは@Controllerを使用する場合
- 23. Zend Renderまたはlayout() - > contentを使用する場合、
- 24. インスタンス変数またはゲッターメソッドを使用する場合のiOS
- 25. zmq - zmq_bindまたはzmq_connectを使用する場合
- 26. 抽象クラスまたはインターフェイスを使用する場合
- 27. whileループpython
- 28. pythonnet(python for .NET)でOWdotNET.dllを使用
- 29. print null値whileループの条件の場合に使用するメッセージ?
- 30. エラーpythonでスタンフォードタガーを使用している場合
+1これは私が*言いたかったことです:) –
コンラッドの例のように、私はそれを得たと思います。その可読性の問題は、両方の反復を使用することができますが、より曖昧なデータ構造のためにWhileを使用することが推奨されます。 – Fabio
@fabio: "その読みやすさの問題です。"いいえ、それはアルゴリズムとデータ構造のマッチングの問題です。思考や「優先」はありません。それは簡単です。 **不可能でない限り使用してください。**何らかの理由でforが不可能な場合、** while **。 –