为何print(x for x in [2,3,4,5] if x%2==0)输出生成器对象而非2和4?
问题原因与解决方案
你看到的<generator object <genexpr> at ...>是因为你写的x for x in [2,3,4,5] if x%2==0是生成器表达式——Python里一种惰性求值的迭代器,它不会立即计算出所有符合条件的元素,而是生成一个用来逐个产生元素的对象。直接打印这个对象,Python就会输出它的类型标识和内存地址,而不是里面的元素。
要得到预期的2和4,有几种写法:
把生成器表达式转为列表,让它立即计算所有元素:
print(list(x for x in [2,3,4,5] if x%2==0))输出:
[2, 4]直接使用列表推导式(和上面效果一致):
print([x for x in [2,3,4,5] if x%2==0])如果想逐个打印元素而非输出列表,可以遍历生成器:
for num in (x for x in [2,3,4,5] if x%2==0): print(num)输出:
2 4
内容的提问来源于stack exchange,提问作者Akshat Kumar Singh
相关产品推荐
相关产品推荐

