您好,感谢您查看我的问题!我最近被介绍给了生成器,并且我阅读了关于' Python yield关键字的解释'。根据我的理解,屈服是动态生成的,无法编入索引,并且会记住在执行yield命令后它停止的位置(纠正我,如果我错了,我还是新手)。 / p>
我的问题是为什么:
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')]]
但这不起作用:
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((combinations(combination,i)))
print y
由于我在组合后直接将组合附加到y,为什么当它以列表形式附加时它起作用,但是当我正常地执行它时,它不会?
答案 0 :(得分:3)
当您致电list(generator_function())
时,generator_function
会迭代到耗尽,每个元素都会存储在一个列表中。所以,这三个操作正在做同样的事情:
l = list(generator_function())
...
l = [x for x in generator_function()]
...
l = []
for x in generator_function():
l.append(x)
在您的示例中,如果不包含list(..)
,则只需将combinations
生成器对象附加到y
即可。使用list(...)
,您将迭代combinations
生成器以构建list
对象,然后将其附加到y
。