如何在一个周期内使用生成器输出和列表?

my_list = [1,2,3]


def my_gen():

    yield 4

    yield 5

    yield 6


for i in my_list:

  print(i) # 1,2,3


for i in my_gen():

  print(i) # 4,5,6

下一个周期如何实施?我期望得到:1,2,3,4,5,6


for i in [my_list, my_gen()]:

  print(i) # 1, 2, 3 <generator object my_gen...> -> 1,2,3,4,5,6


跃然一笑
浏览 195回答 4
4回答

慕容3067478

有一个用于此目的的助手:itertools.chainfor i in itertools.chain(my_list, my_gen()):     print(i)注意:还有一个类似的函数用于聚合对地图(dicts,...)的访问ChainMap

温温酱

如果您想要相同的输出,可以将生成器转换为列表。但这还不够,因为您将打印列表本身,而不是其中的值。您需要的是解压列表,并在 for 循环中使用它。my_list = [1,2,3]def my_gen():&nbsp; &nbsp; yield 4&nbsp; &nbsp; yield 5&nbsp; &nbsp; yield 6for i in [*my_list, *list(my_gen())]:&nbsp; print(i)

临摹微笑

for&nbsp;i&nbsp;in&nbsp;zip(my_list,&nbsp;my_gen()): &nbsp;&nbsp;print(*i)说实话,我不太明白你的问题。请更好地解释一下自己。编辑:是*解压函数zip()创建的元组。

拉莫斯之舞

语法是一个相当未知的功能yield from,它允许将要生成的元素委托给另一个生成器。这样做的优点是不转换my_gen为列表。例如:my_list = [1, 2, 3]def my_gen():&nbsp; &nbsp; yield 4&nbsp; &nbsp; yield 5&nbsp; &nbsp; yield 6def my_final_gen():&nbsp; &nbsp; yield from my_list&nbsp; &nbsp; yield from my_gen()for x in my_final_gen():&nbsp; &nbsp; print(x)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python