大多数pythonic方法将大小为n的块中的迭代器分组

时间:2012-08-22 14:37:20

标签: python iterator

  

可能重复:
  How do you split a list into evenly sized chunks in Python?

如果你有一个值为iter的迭代器i0, i1, i2, ...,那么得到一个值为

的迭代器的Pythonic方法是什么?
[i0, i1, i2], [i3, i4, i5], ...

以上是假设groupby(iter, 3)的输出。

2 个答案:

答案 0 :(得分:2)

itertools模块有一个名为grouper的配方。以下是直接从itertools文档中复制的摘录。

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

答案 1 :(得分:0)

我能找到的最佳解决方案(需要itertools):

groupby = lambda s,n : izip(*[iter(s)]*n)

但感觉有点hacky并且难以阅读