如何在一个循环中使用生成器输出和列表?
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)
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)