2016-07-10 5 views
-1

Nur zum Spaß und aus Neugierde habe ich diese Art erfunden, einen Generator zu schreiben, der zumindest im Prinzip ins Unendliche zählt. Nichts sehr Pythonian. Nur aus Spass.Ein Generator, der ins Unendliche zählt

Aber natürlich mit jeder Iteration lis wird länger, bis etwas schließlich brechen wird.

Gibt es andere (bessere oder schlechtere) Wege, um dasselbe Ziel zu erreichen? Bitte teilen.

lis = [1] 
gen = ((k, lis.append(k+1))[0] for k in lis) 

es um

for j in gen: 
    print(j) 
+2

'für i in itertools.count (1): drucken (i) '...? Siehe [docs] (https://docs.python.org/2.7/library/itertools.html#itertools.count), das auch äquivalenten Python-Code enthält ... –

+0

@ TigerhawkT3 bin mir nicht sicher, ob das das beste Ziel ist (ich habe gesucht zum einen) - da es sich hauptsächlich auf eine unendlich wiederholende Sequenz konzentriert (obwohl eine Antwort kurz 'itertools.count' erwähnt) - keine unendlich inkrementierende Sequenz ... –

+0

Warum sollte man sogar einen Generator benutzen, wenn man eine Liste hält? in Erinnerung? –

Antwort

0

Nur itertools.count verwenden zu verwenden. Hier ein Beispiel:

>>> from itertools import count 
>>> gen = count(0) 
>>> next(gen) 
0 
>>> next(gen) 
1 
>>> next(gen) 
2 
>>> next(gen) 
3 
>>> next(gen) 
4 
>>> 
0

können Sie verwenden itertools.count:

import itertools 

for i in itertools.count(1): 
    print(i) 

Aus der Dokumentation darüber ist funktional äquivalent zu:

def count(start=0, step=1): 
    # count(10) --> 10 11 12 13 14 ... 
    # count(2.5, 0.5) -> 2.5 3.0 3.5 ... 
    n = start 
    while True: 
     yield n 
     n += step