Python内联生成器

Python内联生成器,python,python-3.x,generator,Python,Python 3.x,Generator,我正在尝试将一个值插入列表中 interleave(1, ['A', 'B', 'C']) -> [1, 'A', 1, 'B', 1, 'C'] 有很多方法可以解决这个问题,但我认为这是最具可读性的。但是,要使用此函数,我需要创建一个生成器,它将永远生成1。显然,这可以通过 def gen1(): 尽管如此: 收益率1 但这感觉比必要的更复杂 是否有一种优雅的方法来替换下面代码段中的…,以创建一个内联生成器,从而 res=more\u itertools.interleave(…,[

我正在尝试将一个值插入列表中

interleave(1, ['A', 'B', 'C']) -> [1, 'A', 1, 'B', 1, 'C']
有很多方法可以解决这个问题,但我认为这是最具可读性的。但是,要使用此函数,我需要创建一个生成器,它将永远生成
1
。显然,这可以通过

def gen1():
尽管如此:
收益率1
但这感觉比必要的更复杂

是否有一种优雅的方法来替换下面代码段中的
,以创建一个内联生成器,从而

res=more\u itertools.interleave(…,['A','B','C'])
断言列表(res)=[1,'A',1,'B',1,'C']
…=(1代表[A',B',C'])
显然有效,但我不能称之为优雅。

。我不知道
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']
。我不知道
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']

您还可以使用如下列表:

def interleave(value, lst):
    return [j for i in lst for j in (value, i)]
因此,
interleave(1,['A','B','C'])
返回:

[1, 'A', 1, 'B', 1, 'C']

您还可以使用如下列表:

def interleave(value, lst):
    return [j for i in lst for j in (value, i)]
因此,
interleave(1,['A','B','C'])
返回:

[1, 'A', 1, 'B', 1, 'C']
印刷品

[1, 'A', 1, 'B', 1, 'C']
印刷品

[1, 'A', 1, 'B', 1, 'C']

那个发电机不会永远产生1。。。它产生1次。。。无论如何,您需要
itertools。重复(1)
生成器不会永远生成1。。。它产生1次。。。无论如何,您需要
itertools。重复(1)