당신이 get()
이 list
가 호출 될 때마다 1 크기를 반환 발전기이기 때문에 i[0]
는 사용하는 데 그 이유. 코드 i[0] for i in get()
은 i[0] for i in ([0],[0],[0])
과 같습니다. 코드가 작동하는 이유는 i[0]
이 반환 된 요소의 첫 번째 요소 인 자체를 list [0]
으로 가져옵니다.
귀하의 질문에서 수집 한 것은 i for i in [0,0,0]
입니다. 다른 답변에서 언급했듯이 이것은 list
[0]
대신 int
0
이되도록 생성기를 변경하면 얻을 수 있습니다. 발전기가 [0]
마다 반복 반환,
>>> for i in get():
... print("i={} and i[0]={}".format(i, i[0]))
...
i=[0] and i[0]=0
i=[0] and i[0]=0
i=[0] and i[0]=0
당신이 볼 수 있듯이 그것은 각의 첫 번째 요소를 얻을 수 i[0]
를 사용해야하는 이유는 다음과 같은 예제 코드에 발전기의 결과를 볼 수 있습니다 명부. r
발전기의 단지 결과가되기 때문에
, 당신은 다음을 수행하여 단순화 할 수 있습니다 : (GET에 내가 [0] 전을 위해())
>>> def gen():
... for i in range(3):
... yield 0
...
>>> r = list(gen())
>>> r
[0, 0, 0]
또는 짧은 : 그 기능 flatten (concat)에 대한 표준을 사용하는 것 [0] * 3'. –
@ Space_C0wb0y 아니요 코드가 짧지 만 생성기 대신 목록을 만듭니다. 3의 큰 값의 경우, 솔루션은 잠재적으로 불필요한 많은 메모리를 할당합니다. – phihag
@philhag 나는 "3의 큰 값"= 수학을 재미있게 만들 수있는 아이디어를 좋아한다 :-) – neil