Schleife von 1 bis unendlich in Python

In C würde ich das tun:

int i; for (i = 0;; i++) if (thereIsAReasonToBreak(i)) break; 

Wie kann ich in Python etwas Ähnliches erreichen?

7 Solutions collect form web for “Schleife von 1 bis unendlich in Python”

Mit itertools.count :

 import itertools for i in itertools.count(): if there_is_a_reason_to_break(i): break 

In Python2 ist xrange() auf sys.maxint beschränkt, was für die meisten praktischen Zwecke ausreichen kann:

 import sys for i in xrange(sys.maxint): if there_is_a_reason_to_break(i): break 

In Python3 kann range() viel höher gehen, wenn auch nicht unendlich:

 import sys for i in range(sys.maxsize**10): # you could go even higher if you really want if there_is_a_reason_to_break(i): break 

Also ist es wahrscheinlich am besten, count() .

 def to_infinity(): index=0 while 1: yield index index += 1 for i in to_infinity(): if i > 10:break 

Den Kommentar von thg435 erneut bekräftigen:

 from itertools import takewhile, count def thereIsAReasonToContinue(i): return not thereIsAReasonToBreak(i) for i in takewhile(thereIsAReasonToContinue, count()): pass # or something else 

Oder vielleicht noch prägnanter:

 from itertools import takewhile, count for i in takewhile(lambda x : not thereIsAReasonToBreak(x), count()): pass # or something else 

takewhile imitiert eine "gut erzogene" C für Schleife: Sie haben eine Fortsetzungsbedingung, aber Sie haben einen Generator anstelle eines willkürlichen Ausdrucks. Es gibt Dinge, die du in einer C für Loop machen kannst, die "schlecht benommen" sind, wie zB das Ändern von i im Loop-Körper. Es ist möglich, diejenigen zu imitieren, die sich mit takewhile , wenn der Generator ist eine Schließung über einige lokale Variable i dass Sie dann Chaos mit. In einer Weise, die definieren, dass Schließung macht es besonders offensichtlich, dass Sie etwas tun, das möglicherweise mit Ihrer Kontrollstruktur verwirrend ist.

Einfachste und beste:

 i = 0 while not there_is_reason_to_break(i): # some code here i += 1 

Es kann verlockend sein, die nächste Analogie zum C-Code in Python zu wählen:

 from itertools import count for i in count(): if thereIsAReasonToBreak(i): break 

Aber Vorsicht, modifizieren i werde nicht den Fluss der Schleife wie es in C. Daher ist mit einer while Schleife ist eigentlich eine geeignetere Wahl für Portierung, dass C-Code zu Python.

Wenn du das in C machst, dann ist dein Urteil dort so bewölkt wie in Python 🙂

Der bessere C-Weg wäre:

 int i = 0; while (! thereIsAReasonToBreak (i)) { // do something i++; } 

oder:

 int i; // *may* be better inside the for statement to localise scope for (i = 0; ! thereIsAReasonToBreak (i); i++) { // do something } 

Das würde in die Python übersetzen:

 i = 0 while not thereIsAReasonToBreak (i): # do something i += 1 

Nur wenn du in der Mitte der Schleife irgendwo aussteigen musst, müsstest du dir Sorgen machen. Wenn dein potentieller Ausgang am Anfang der Schleife ist (wie es hier zu sein scheint), ist es in der Regel besser, den Ausgang in die Schleife selbst zu verschlüsseln.

 a = 1 while a: if a == Thereisareasontobreak(a): break a += 1 
 while 1==1: if want_to_break==yes: break else: # whatever you want to loop to infinity 

Diese Schleife geht auf unendlich.

  • Matplotlib: subplot
  • Senden von StopIteration auf Schleife von außerhalb des Iterators
  • Extrahieren von Sätzen aus Pos-markierten Korpus mit bestimmten Wort, Tag Combos
  • Was macht eine Schleife innerhalb einer Liste in Python?
  • Zuweisungsbedingung in Python while Loop
  • Beenden Sie die Schleife in Python
  • Ausbrechen von verschachtelten Schleifen [doppelte]
  • Python: Nur einmal in einer Schleife drucken
  • Für Loop iterate über Potenzen von 2
  • Brauchen Sie Hilfe, um eine Schleife hinzuzufügen, um Programm in Python neu zu starten
  • Ablehnen oder Schleifen der Benutzereingabe, wenn zwei Bedingungen nicht erfüllt sind
  • Python ist die beste Programmiersprache der Welt.