Python内联生成器

问题描述 投票:0回答:2

我正在尝试将值插入列表。

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'])显然有效,但我不会称之为优雅。

python python-3.x generator
2个回答
2
投票

itertools.repeat。我不知道itertools.repeat的实现方式,但是您可以使用interleavechain做同样的事情:

zip

0
投票

您还可以像这样使用列表理解:

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)]
© www.soinside.com 2019 - 2024. All rights reserved.