从可迭代对象一次产生多个对象?

Mat*_*ner 4 python grouping iterator yield

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

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

Mik*_*ham 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)
Run Code Online (Sandbox Code Playgroud)

(使用相同的迭代器几次删除[iter(iterable)]*n是一个老技巧,但将其封装在此函数中可以避免混淆代码,并且它与许多人将使用的形式和界面完全相同.这是一种常见的需求,这有点让人感到羞耻实际上并不在itertools模块中.)

  • AFAIK` [iter(iterable)]*n`是脏的,因为函数参数的执行顺序没有定义,即你不能确定函数的第一个参数是否首先得到评估.只要您使用相同的解释器,但这可能与其他解释器产生奇怪的结果,这可能不是问题. (2认同)