如何从可迭代对象一次产生多个项目?
例如,对于任意长度的序列,如何在每次迭代的X个连续项的组中迭代序列中的项?
答案 0 :(得分: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
模块中,这有点遗憾。)
答案 1 :(得分: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个元素。