2013-04-16 5 views
9

내가파이썬 : 변환 목록 발전기는

data = [] 
    data.append("A") 
    data.append("B") 
    data.append("C") 
    data.append("D") 

가 어떻게 발전기 유형이 하나를 변환합니까리스트가 있다고? 높게 평가 된 샘플 코드와 어떤 도움 ...

는 URL http://eli.thegreenplace.net/2012/04/05/implementing-a-generatoryield-in-a-python-c-extension/

은 내가 원하는 무엇인가를 발견하셨습니까? 그래서 같은

+0

google 키워드 'yield' – yedpodtrzitko

답변

2
import itertools 
iter_data = itertools.chain(data) 

:

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, iter_data = iter (data)와 다른 점이 없습니다 ... 여기에 실제로 연결되어 있지 않습니다. – mgilson

+1

아무것도 연결하지 않습니까? 하나의 링크 체인을 가질 수 없습니까? ;-) –

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

문자 적 ​​동등은 다음과 같습니다 발전기 함수를 호출

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

는 발전기 반복자를 돌려줍니다. 목록 생성자에 발전기 반복자를 전달하기 제공 :

data_iter = (c for c in 'ABCD') 

참고 :이 발전기 반복자는 발전기 식을 사용하여 만들 수 있습니다

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

당신은 네 문을 추가하여 목록을 작성 . 그것은 일반적으로 당신이 그것을 쓰는 방법이 아닙니다.

오히려 수행

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

이 같은 말인가요? 파이썬에서

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> 

작품 2.7.4+

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

편집 : 람다 발전기 공장 패턴

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

하나 더 약간의 변화 0

정확하게 기억한다면 이것은 일반적인 방법입니다.

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

등 등

9

당신이 발전기을 만들려면, 확실합니까? 생성자는 반복자 유형을 반환하는 함수입니다. yield 키워드 (참조 : term-generator 참조)를 사용하십시오. 대부분의 시간

data_gen = (y for y in data) 

, 당신이 원하는 것

직접은, 예를 들어 iterator 객체를 생성하는 : 당신이 정말 원하는 경우 는 steven-rumbalski의 대답은 당신이 찾고있는 무엇을 정확하게 next() 방법을 사용하십시오. data_iter = data.__iter__()에 해당합니다

data_iter = iter(data) 

, 참조 :이 경우, 대답은 위의 mgilson에 의해 코멘트에서 암시 적 functions#iter.