【发布时间】:2023-03-17 13:40:02
【问题描述】:
您好,感谢您查看我的问题!我最近被介绍给生成器,并阅读了关于“Python yield 关键字解释”的内容。根据我的理解,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')]]
但这不起作用:
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 生成后直接将组合附加到它,为什么当它以列表形式附加时它可以工作,但当我正常执行时,它不起作用?
【问题讨论】:
-
生成器本身就是一个对象。在第一种情况下,您将传递给
list构造函数的结果附加到y列表中。但是,在第二种情况下,您将生成器对象本身附加到该列表中,而不是从其中创建的list。