python是否有一个用于交错生成器/序列的内置函数?

2024-05-20 02:03:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到itertools没有(在我看来)能够从其他几个iterable对象交错元素的函数(与压缩它们相反):

def leaf(*args): return (it.next() for it in cycle(imap(chain,args)))
tuple(leaf(['Johann', 'Sebastian', 'Bach'], repeat(' '))) => ('Johann', ' ', 'Sebastian', ' ', 'Bach', ' ')

(编辑)我问这个问题是因为我想避免不必要的压缩/压平事件。在

显然,leaf的定义很简单,但是如果有一个预定义的函数可以做同样的事情,我更愿意使用它,或者使用一个非常清晰的生成器表达式。在itertools或其他一些著名的库中,是否有这样的内置函数,或者合适的惯用表达式?

编辑2:可以有更简洁的定义(使用functional包):

^{pr2}$

Tags: 对象函数元素编辑定义表达式defargs
2条回答

您正在寻找内置的^{}^{}来展开结果:

>>> import itertools
>>> list(zip(['Johann', 'Sebastian', 'Bach'], itertools.repeat(' ')))
[('Johann', ' '), ('Sebastian', ' '), ('Bach', ' ')]
>>> list(itertools.chain.from_iterable(_))
['Johann', ' ', 'Sebastian', ' ', 'Bach', ' ']

请注意,我使用list只是为了强制一个好的输出。使用标准itertools,leaf的替代实现将是:

^{2}$

相关问题 更多 >