중복 가능성 :
Python에서 목록을 균등 한 크기의 청크로 어떻게 분할합니까?
이터 러블을 입력으로 받아 이터 러블의 이터 러블을 반환하는 "배치"함수를 찾을 수 없다는 것에 놀랐습니다.
예를 들면 :
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
또는:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
이제 저는 매우 간단한 생성기라고 생각한 것을 작성했습니다.
def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch
그러나 위의 내용은 내가 기대했던 것을 제공하지 않습니다.
for x in batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]
그래서 나는 무언가를 놓 쳤고 이것은 아마도 파이썬 생성기에 대한 나의 완전한 이해 부족을 보여줄 것입니다. 누구든지 나를 올바른 방향으로 안내해 줄 수 있습니까?
[편집 : 결국 위의 동작은 파이썬 자체가 아닌 ipython 내에서 실행할 때만 발생한다는 것을 깨달았습니다.]