Python:附加一个产生列表的函数?

时间:2014-05-20 19:40:43

标签: python list yield

您好,感谢您查看我的问题!我最近被介绍给了生成器,并且我阅读了关于' 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,为什么当它以列表形式附加时它起作用,但是当我正常地执行它时,它不会?

1 个答案:

答案 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