2013-04-16 14 views

Odpowiedz

2
import itertools 
iter_data = itertools.chain(data) 

tak:

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, to nie różni się od 'iter_data = iter (data)' ... W rzeczywistości niczego tu nie łańcuchujesz. – mgilson

+1

nic nie łańcuchuje? nie można mieć jednego łańcucha linków? ;-) –

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

Równoważnik dosłownym będzie:

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

Wywołanie funkcję generatora zwraca generującą iteracyjnej. Mijając generator-iterator do konstruktora lista zawiera:

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

Ten generator-iterator może być także tworzone za pomocą wyrażenia prądnicy:

data_iter = (c for c in 'ABCD') 

Uwaga: Ty wypełnione listy z czterech dołączyć oświadczenia . Zazwyczaj nie jest tak, jak byś to napisał.

Raczej zrobić:

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

Masz na myśli coś takiego?

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> 

prace w Pythonie 2.7.4+

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

Edit:

Jeszcze niewielkie zmiany generatora lambda fabryki wzór

>>> 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() 

To jest ogólny sposób robienia tego, o ile dobrze pamiętam.

>>> 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 

itp itd

9

Czy jesteś pewien, że chcesz stworzyć generator? Generator jest funkcją, która zwraca typ iteratora, skonstruowany np. za pomocą słowa kluczowego yield (porównaj term-generator). Jeśli naprawdę chcesz to odpowiedź steven-rumbalski jest to dokładnie to, czego szukasz:

data_gen = (y for y in data) 

większość czasu, będziemy chcieli, aby bezpośrednio utworzyć obiekt iterator, np korzystać z metody next().W tym przypadku odpowiedź jest ukryte w komentarzu przez mgilson powyżej:

data_iter = iter(data) 

co jest równoważne data_iter = data.__iter__(), cf. functions#iter.