Возможный дубликат:
Как разбить список на куски одинакового размера в 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]
Итак, я пропустилчто-то, и это, вероятно, показывает мое полное непонимание генераторов Python.Кто-нибудь захочет указать мне правильное направление?
[Edit: я в конечном итоге понял, что вышеупомянутое поведение происходит только тогда, когда я запускаю это в ipython, а не сам Python]