如何在一个循环中使用生成器输出和列表?

How to use generator output and list in one cycle?

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
for i in zip(my_list, my_gen()):
  print(*i)

老实说,我不太明白你的问题。请更好地解释你自己。

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

有一个帮手可以达到这个目的:itertools.chain

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

注意:还有一个类似的函数用于聚合访问地图(dicts,...)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)

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

my_list = [1, 2, 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)