Возможный дубликат:
Как в 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]