как разбить итерабельную таблицу на части постоянного размера

Возможный дубликат:
Как в 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: I eventually realized that the above behavior happens only when I run this within ipython rather than python itself]

68
задан Community 23 May 2017 в 12:03
поделиться