4
对不起,如果标题措辞不当,我不知道如何对其进行定义。我有一个函数,基本上迭代2维可迭代的第二维。下面是一个简单再生产:发电机未按预期关闭数据
words = ['ACGT', 'TCGA']
def make_lists():
for i in range(len(words[0])):
iter_ = iter([word[i] for word in words])
yield iter_
lists = list(make_lists())
for list_ in lists:
print(list(list_))
运行此输出:
['A', 'T']
['C', 'C']
['G', 'G']
['T', 'A']
我想获得,而不必评估words
发电机,以防words
是很长,所以我尝试以下:
words = ['ACGT', 'TCGA']
def make_generators():
for i in range(len(words[0])):
gen = (word[i] for word in words)
yield gen
generators = list(make_iterator())
for gen in generators:
print(list(gen))
但是,运行输出:
['T', 'A']
['T', 'A']
['T', 'A']
['T', 'A']
我不确定到底发生了什么。我猜想这与发电商的理解有关,因为它们都是分享的,而不是在收购时关闭它的范围。如果我在一个单独的函数中创建生成器并从该函数返回它似乎工作。