如何从可迭代对象一次生成多个项目?
例如,对于任意长度的序列,我如何迭代序列中的项目,每次迭代以 X 个连续项目为一组?
您的问题有点含糊,但请查看文档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
模块中。)
这是另一种适用于没有 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 个元素。