问题描述
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)