2013-04-16 15 views

risposta

2
import itertools 
iter_data = itertools.chain(data) 

in questo modo:

In [10]: data 
Out[10]: [1, 2, 3, 4, 5, 6, 7, 8, 9] 

In [11]: iter_data=itertools.chain(data) 

In [12]: iter_data 
Out[12]: <itertools.chain at 0x1ce8950> 

In [13]: iter_data.next() 
Out[13]: 1 
+5

FWIW, questo non è diverso da 'iter_data = iter (dati)' ... In realtà non stai concatenando nulla qui. – mgilson

+1

non concatenare nulla? non si può avere una singola catena di link? ;-) –

1
>>> d = ['A', 'B', 'C', 'D'] 
>>> 
>>> def gen(d): 
...  for i in d: 
...    yield i 
... 
>>> for i in gen(d): 
...  print i 
... 
A 
B 
C 
D 
>>> 
6

L'equivalente letterale sarebbe:

def data_generator(): 
    yield 'A' 
    yield 'B' 
    yield 'C' 
    yield 'D' 

Chiamando la funzione di generatore restituisce un generatore-iteratore. Passando il generatore-iteratore al costruttore elenco fornisce:

>>> list(data_generator()) 
['A', 'B', 'C', 'D'] 

Questo generatore-iteratore può anche essere creato utilizzando un generatore di espressione:

data_iter = (c for c in 'ABCD') 

Nota: Hai riempito la vostra lista con quattro accoda dichiarazioni . In genere non è come lo si scrive.

preferisce fare:

data = ['A', 'B', 'C', 'D'] 
1

Vuoi dire qualcosa di simile?

def gen(): 
    for x in "ABCD": 
     yield x 

In [9]: it=gen() 

In [10]: next(it) 
Out[10]: 'A' 

In [11]: next(it) 
Out[11]: 'B' 

In [12]: next(it) 
Out[12]: 'C' 

In [13]: next(it) 
Out[13]: 'D' 
13
>>> (n for n in [1,2,3,5]) 
<generator object <genexpr> at 0x02A52940> 

opere in Python 2.7.4+

>>> a2g = lambda x : (n for n in x) 
>>> a2g([1,2,3,4,5]) 
<generator object <genexpr> at 0x02A57CD8> 

Edit:

più Uno leggera variante di un modello di fabbrica generatore lambda

>>> a2g = lambda *args: (n for n in args) 
>>> for i in a2g(1,2,3,4, 5): print i 

1 
2 
3 
4 
5 
0
(item for item in listNameHere).next() 

Questo è il modo generale di farlo, se ricordo correttamente.

>>> a = [0,1,2,3,4] 
>>> x = (item for item in a) 
>>> x 
<generator object <genexpr> at 0x028B8440> 
>>> x.next() 
0 
>>> x.next() 
1 
>>> x.next() 
2 

ecc ecc

9

Sei sicuro, si vuole creare un generatore di? Un generatore è una funzione che restituisce un tipo di iteratore, costruito ad es. utilizzando la parola chiave yield (vedere term-generator). Se si vuole veramente questo, la risposta steven-rumbalski s' è esattamente quello che stai cercando:

data_gen = (y for y in data) 

maggior parte del tempo, si vuole creare direttamente un oggetto iterator, per esempio utilizzare il metodo next().In questo caso, la risposta è implicita nel commento di mgilson sopra:

data_iter = iter(data) 

che è equivalente a data_iter = data.__iter__(), cf. functions#iter.

Problemi correlati