在
grouper()
从配方
itertools文件的食谱来靠近你想要什么:
def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args)
但是,它将使用填充值填充最后一个块。
较不通用的解决方案仅适用于序列,但可以根据需要处理最后一个块
[my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
最后,一种可在一般迭代器上运行且其行为符合预期的解决方案是
def grouper(n, iterable): it = iter(iterable) while True: chunk = tuple(itertools.islice(it, n)) if not chunk:return yield chunk



