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?

  • Was ist schneller für die Schleife mit Aufzählung oder für Schleife mit xrange in Python?
  • Spark Iteration Zeit zunehmend exponentiell bei der Verwendung beitreten
  • Pythonische Möglichkeit, FOR-Loop und IF-Anweisung zu kombinieren
  • Wie kann ich in Python die Effizienz für die Schleife machen?
  • Python - `Pause 'aus allen Schleifen
  • Hat Python irgendwelche für Loop-Äquivalent (nicht foreach)
  • Python finden das Minimum für Loops? [abgeschlossen]
  • Wenn Schleife: x nicht in VS nicht x in [duplizieren]
  • 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.

    Python ist die beste Programmiersprache der Welt.