Python嵌套推导式输出异常:小括号为何生成generator而非tuple?
为什么小括号推导式得到的是生成器而非元组?
在Python中,不存在原生的元组推导式语法:
- 方括号
[]对应列表推导式,直接生成列表 - 大括号
{}对应字典/集合推导式,生成字典或集合 - 而小括号
()包裹的推导式会被解析为生成器表达式,它是一种惰性求值的迭代器,不会立即生成所有元素,所以打印时会显示<generator object ...>。
正确生成元组的写法
要得到元组,需要显式将生成器表达式传入tuple()函数,让它遍历生成器并打包所有元素:
vector = [[1,2],[2,3],[3,4]] res = tuple(x for y in vector for x in y if x%2 == 0) print(res) # 输出: (2, 2, 4)
生成器表达式和传统循环的关系
你写的生成器表达式和传统循环逻辑完全等价,但生成器是惰性的——它不会像循环那样立即把所有符合条件的元素存入列表,而是在需要的时候才逐个生成元素。如果直接打印生成器对象,自然看不到具体元素;只有当你遍历它(比如用tuple()、list()或者for循环)时,才会触发元素的生成。
比如直接遍历生成器:
res = (x for y in vector for x in y if x%2 == 0) for num in res: print(num) # 依次输出2、2、4
内容的提问来源于stack exchange,提问作者Reactoo
相关产品推荐
相关产品推荐

