Python中map函数的奇怪行为:为何二次转列表返回空?
为什么第二次调用
list(x)返回空列表? 这是因为在Python中,map()函数返回的是一个迭代器对象,而迭代器的核心特性就是只能被遍历一次,用完就空了。
咱们拆解你的代码一步步看:
- 当你执行
x = map(int, selectedvalidations.split(','))时,map()并没有立刻把所有字符串转换成整数并存储起来——它只是创建了一个迭代器,这个迭代器会在你主动请求元素(比如调用list(x))的时候,才逐个生成转换后的整数。 - 第一次调用
list(x)时,迭代器会从头走到尾,把所有生成的元素打包成列表返回,同时迭代器内部的"指针"已经移到了末尾,没有剩余元素了。 - 当你再次调用
list(x)时,迭代器已经没有元素可以生成了,自然就返回空列表[]。
如果想要多次使用这些转换后的整数,你可以直接把迭代器的结果提前存成列表,而不是保留迭代器本身:
selectedvalidations='1,2,3,4,5,6,7' # 直接转换成列表并存储,后续可以多次调用 x = list(map(int, selectedvalidations.split(','))) print(x) # 输出 [1, 2, 3, 4, 5, 6, 7] print(x) # 再次输出完全相同的内容
打个比方:迭代器就像一次性的零食包装袋,拆开来吃完就空了;而列表是把袋里的零食全部倒在盘子里,随时都能拿。
内容的提问来源于stack exchange,提问作者Mauro Assis
相关产品推荐
相关产品推荐

