4

如何从可迭代对象一次生成多个项目?

例如,对于任意长度的序列,我如何迭代序列中的项目,每次迭代以 X 个连续项目为一组?

4

2 回答 2

7

您的问题有点含糊,但请查看文档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)

(多次压缩同一个迭代器[iter(iterable)]*n是一个老技巧,但是将它封装在这个函数中可以避免混淆代码,并且它与许多人将使用的完全相同的形式和接口。这是一个有点普遍的需求,但有点遗憾实际上不在itertools模块中。)

于 2010-02-04T19:17:22.690 回答
2

这是另一种适用于没有 izip_longest 的旧版本 Python 的方法:

def grouper(n, seq):
  result = []
  for x in seq:
    result.append(x)
    if len(result) >= n:
      yield tuple(result)
      del result[:]
  if result:
    yield tuple(result)

没有填充符,因此最后一组可能包含少于 n 个元素。

于 2010-02-04T20:32:21.260 回答