Python中map转list正常后续转set、tuple返回空对象的原因是什么
核心原因
Python 3 里 map() 返回的是迭代器对象,迭代器属于一次性消耗的资源,遍历完成后就会被清空,无法重复读取。
具体执行逻辑
- 第一次执行
print(list(result))时,已经完整遍历了result迭代器的所有元素,迭代器的内部指针已经移动到最末尾,没有剩余元素可供读取 - 后续再调用
set(result)、tuple(result)遍历同一个迭代器时,自然取不到任何元素,所以返回空对象
解决方案
如果需要多次使用 map 计算后的结果,第一次转换时就直接转成列表/元组这类可以重复读取的序列类型保存即可:
def addition(n): return n + n numbers = (1, 2, 3, 4) # 直接将map结果转为列表保存,支持多次读取 result = list(map(addition, numbers)) print(result) print(set(result)) print(tuple(result))
修改后输出结果为:
[2, 4, 6, 8]
{8, 2, 4, 6}
(2, 4, 6, 8)
内容的提问来源于stack exchange,提问作者Priya Vyshnavi
相关产品推荐
相关产品推荐

