你好,谢谢你看我的问题!我最近被介绍给生成器,我读了关于“pythonyield关键字解释”的about。根据我的理解,yield是动态生成的,不能被索引,并且在执行yield命令之后,它会记住它在哪里停止(如果我错了,请纠正我,我对这个还不熟悉)。在
我的问题是为什么:
from itertools import combinations
x = [['4A'],['5A','5B','5C'],['7A','7B']]
y = list()
for combination in x:
for i in range(1,len(combination)+1):
y.append(list(combinations(combination,i)))
print y # [[('4A',)], [('5A',), ('5B',), ('5C',)],
# [('5A', '5B'), ('5A', '5C'), ('5B', '5C')],
# [('5A', '5B', '5C')], [('7A',), ('7B',)], [('7A', '7B')]]
但这行不通:
^{pr2}$既然我是在y产生后直接将这些组合附加到y上,为什么当它以列表形式附加时,它是有效的,但是当我正常地这样做时,它就不起作用了?在
当您调用
list(generator_function())
时,generator_function
被迭代到耗尽,每个元素都存储在一个列表中。所以,这三种操作都是一样的:在您的示例中,没有包含
list(..)
,您只需将combinations
生成器对象附加到y
中。使用list(...)
,您将迭代combinations
生成器来构建list
对象,然后将其附加到y
。在相关问题 更多 >
编程相关推荐