我正在尝试将值插入列表。
interleave(1, ['A', 'B', 'C']) -> [1, 'A', 1, 'B', 1, 'C']
有很多方法可以解决此问题,但我认为more_itertools.interleave最容易理解。但是,要使用此功能,我需要创建一个永远产生1
的生成器。显然,可以使用
def gen1():
yield 1
但是这比需要的要复杂。
是否有一种优雅的方法可以替换下面的代码段中的...
,以创建一个内联生成器,使得
res = more_itertools.interleave(..., ['A', 'B', 'C'])
assert list(res) == [1, 'A', 1, 'B', 1, 'C']
... = (1 for _ in ['A', 'B', 'C'])
显然有效,但我不会称之为优雅。
itertools.repeat
。我不知道itertools.repeat
的实现方式,但是您可以使用interleave
和chain
做同样的事情:
zip
您还可以像这样使用列表理解:
from itertools import chain, repeat
print(list(chain.from_iterable(zip(repeat(1), ['A', 'B', 'C']))))
# [1, 'A', 1, 'B', 1, 'C']
此返回:
[j for i in ['A', 'B', 'C'] for j in (1, i)]