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

问题描述

my_list = [1,2,3]

def my_gen():
    yield 4
    yield 5
    yield 6

for i in my_list:
  print(i) # 1,3

for i in my_gen():
  print(i) # 4,5,6

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

for i in [my_list,my_gen()]:
  print(i) # 1,3 <generator object my_gen...> -> 1,6

解决方法

有一个用于此目的的助手:itertools.chain

for i in itertools.chain(my_list,my_gen()):
    print(i)

注意:还有一个类似的功能,用于汇总对地图(字典,...)ChainMap

的访问 ,

如果您想要的是相同的输出,则可以将生成器转换为列表。

但这还不够,因为您将打印列表本身而不是其中的值。

您需要解压缩列表,然后在for循环中使用它。

my_list = [1,2,3]

def my_gen():
    yield 4
    yield 5
    yield 6

for i in [*my_list,*list(my_gen())]:
  print(i)
,
for i in zip(my_list,my_gen()):
  print(*i)

说实话,我不太了解您的问题。请更好地解释自己。

编辑:*将解压缩zip()函数创建的元组。

,

语法yield from是一个非常未知的功能,它允许将要产生的元素委托给另一个生成器。这具有不将my_gen转换为列表的优点。例如:

my_list = [1,3]

def my_gen():
    yield 4
    yield 5
    yield 6

def my_final_gen():
    yield from my_list
    yield from my_gen()

for x in my_final_gen():
    print(x)