我一直在用生成器函數搞亂Python。我想寫一個函數,它使用一個其值爲元組的生成器,並返回一個生成器列表,其中每個生成器的值對應於原始元組中的一個索引。Python生成器與列表理解衝突
目前,我有一個函數爲元組中的硬編碼元素實現此功能。這裏是我的代碼:
import itertools
def tee_pieces(generator):
copies = itertools.tee(generator)
dropped_copies = [(x[0] for x in copies[0]), (x[1] for x in copies[1])]
# dropped_copies = [(x[i] for x in copies[i]) for i in range(2)]
return dropped_copies
def gen_words():
for i in "Hello, my name is Fred!".split():
yield i
def split_words(words):
for word in words:
yield (word[:len(word)//2], word[len(word)//2:])
def print_words(words):
for word in words:
print(word)
init_words = gen_words()
right_left_words = split_words(init_words)
left_words, right_words = tee_pieces(right_left_words)
print("Left halves:")
print_words(left_words)
print("Right halves:")
print_words(right_words)
這正確地分裂發生器,導致left_words包含左半部分和right_words包含右半部分。
問題出現在我嘗試使用上面註釋過的行參數化要創建的發電機數量時。據我所知,應該是等價的,但是當我使用該行代替,既left_words和right_words最終方含字的右半邊,給人這樣的輸出:
Left halves:
lo,
y
me
s
ed!
Right halves:
lo,
y
me
s
ed!
這究竟是爲什麼?我怎樣才能適應期望的結果,即參數化將發生器分成幾部分?
謝謝,這很好地解決了它。 – isaacg