List returned by map function disappears after one use(map 函数返回的列表在使用一次后消失)
问题描述
我是 Python 新手.我正在使用 Python 3.3.2,我很难弄清楚为什么会出现以下代码:
I'm new to Python. I'm using Python 3.3.2 and I'm having a hard time figuring out why the following code:
strList = ['1','2','3']
intList = map(int,strList)
largest = max(intList)
smallest = min(intList)
给我这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: min() arg is an empty sequence
但是这段代码:
strList = ['1','2','3']
intList = list(map(int,strList))
largest = max(intList)
smallest = min(intList)
完全没有错误.
我的想法是,当 intList 被分配给 map 函数的返回值时,它变成了一个迭代器而不是一个列表,根据 文档.并且可能作为调用max()
的副作用,迭代器已经迭代到列表的末尾,导致Python认为列表是空的(我这里借鉴C知识,我我不熟悉迭代器在 Python 中是如何真正工作的.)我必须支持这一点的唯一证据是,对于第一个代码块:
My thought is that when intList is assigned to the return value of the map function, it becomes an iterator rather than a list, as per the docs. And perhaps as a side effect of calling max()
, the iterator has been iterated to the end of the list, causing Python to believe the list is empty (I'm drawing from C knowledge here, I'm not familiar with how iterators truly work in Python.) The only evidence I have to support this is that, for the first block of code:
>>> type(intList)
<class 'map'>
而对于第二个代码块:
>>> type(intList)
<class 'list'>
有人可以帮我确认或否认吗?
Can someone confirm or deny this for me please?
推荐答案
你完全正确.在 Python 3 中,map
返回一个迭代器,您只能迭代一次.如果你第二次迭代一个迭代器,它会立即引发 StopIteration
,就好像它是空的一样.max
消耗整个事物,而 min
将迭代器视为空.如果需要多次使用元素,则需要调用 list
来获取列表而不是迭代器.
You are exactly correct. In Python 3, map
returns an iterator, which you can only iterate over once. If you iterate over an iterator a second time, it will raise StopIteration
immediately, as though it were empty. max
consumes the whole thing, and min
sees the iterator as empty. If you need to use the elements more than once, you need to call list
to get a list instead of an iterator.
这篇关于map 函数返回的列表在使用一次后消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:map 函数返回的列表在使用一次后消失


- pytorch 中的自适应池是如何工作的? 2022-07-12
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01