2014-04-07 11 views
19

Hat Python eine native iterable der unendlichen Ganzzahl-Serie?Native unendliche Reichweite?

Ich habe versucht range(float('inf')) und iter(int), aber keiner funktioniert.

Ich kann natürlich meine eigenen Generator entlang der Linien von

def int_series(next=1): 
    while True: 
     next += 1 
     yield next 

implementieren, aber das fühlt sich an wie etwas, was bereits vorhanden sein sollte.

+0

In welchen praktischen Zwecke würden Sie einen 'inf' brauchen – sshashank124

+17

Wie ist das "primär meinungsbezogen"? – arshajii

+1

Ich wollte das selbe sagen. Es ist absurd, dafür zu stimmen, eine so kohärente Frage zu beenden. – keyser

Antwort

32

Ja. Es ist itertools.count:

>>> import itertools 
>>> x = itertools.count() 
>>> next(x) 
0 
>>> next(x) 
1 
>>> next(x) 
2 
>>> # And so on... 

Sie start und step Argumente angeben können, obwohl stop keine Option ist (das ist, was xrange ist):

>>> x = itertools.count(3, 5) 
>>> next(x) 
3 
>>> next(x) 
8 
>>> next(x) 
13 
15

Sie können dazu itertools.count verwenden.

for x in itertools.count(): 
    # do something with x infinite times 

Wenn Sie wollen nicht die ganze Zahl besser zurück verwenden itertools.repeat von count(), dann verwenden:

for _ in itertools.repeat(None): 
    # do something infinite times 
+6

Wenn Sie die ganze Zahl nicht wollen, ist 'while True' viel geeigneter. – user2357112

+0

@ user2357112 While-Schleife kann im Vergleich zu einer for-Schleife doppelt so langsam sein. –

+5

Wenn dieser kleine Overhead wirklich zählt, wird 'while 1' zu einem unbedingten Sprung kompiliert, der sogar schneller ist als die for-Schleife. Höchstwahrscheinlich wird die vom Schleifenkörper benötigte Zeit dominieren und der Unterschied wird keine Rolle spielen. – user2357112