my_list = [1,2,3]def my_gen(): yield 4 yield 5 yield 6for i in my_list: print(i) # 1,2,3for i in my_gen(): print(i) # 4,5,6下一個周期如何實施?我期望得到:1,2,3,4,5,6for i in [my_list, my_gen()]: print(i) # 1, 2, 3 <generator object my_gen...> -> 1,2,3,4,5,6
4 回答

慕容3067478
TA貢獻1773條經驗 獲得超3個贊
有一個用于此目的的助手:itertools.chain
for?i?in?itertools.chain(my_list,?my_gen()): ????print(i)
注意:還有一個類似的函數用于聚合對地圖(dicts,...)的訪問ChainMap

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
如果您想要相同的輸出,可以將生成器轉換為列表。
但這還不夠,因為您將打印列表本身,而不是其中的值。
您需要的是解壓列表,并在 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)

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
for i in zip(my_list, my_gen()): print(*i)
說實話,我不太明白你的問題。請更好地解釋一下自己。
編輯:是*
解壓函數zip()
創建的元組。

拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
語法是一個相當未知的功能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)
添加回答
舉報
0/150
提交
取消