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)