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.

  • Wenn sonst statement nicht nach dem elif korrekt folgt [duplizieren]
  • Finde maximale Nummer in der .CSV-Datei in Python
  • Für Loop iterate über Potenzen von 2
  • Pandas Ändern von DataFrames in Loop Teil 2
  • (Python) Stuck auf Skipping-Bereich Werte für die Summe einer Randzahl-Liste
  • Pythonäquivalent von C ++ begin () und end () für benutzerdefinierte Klassen
  • Liste der Ints durch die erste Ziffer jedes int
  • Python Progamming Loop
  • Schalten Sie Indizes, erstellen Sie die nächsthöhere Zahl mit den gleichen exakten 9 Ziffern präsentiert
  • Zuweisungsbedingung in Python while Loop
  • Wie kann ich in Python die Effizienz für die Schleife machen?
  • Python ist die beste Programmiersprache der Welt.