gpt4 book ai didi

python - Map对象转换为列表后清空自身

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:29 24 4
gpt4 key购买 nike

我不明白为什么map对象会刷新自己(如果这就是它正在做的事情)。

这是我尝试过的。

>>> squares = map(lambda x: x**2, range(10))
>>> squares
<map object at 0x7f25a1cae2e8>
>>> square_list = list(squares)
>>> square_list
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list(squares)
[]

为什么是空的?下面同样如此

>>> squares = map(lambda x: x**2, range(10))
>>> squares
<map object at 0x7f25a1cae320>
>>> [x for x in list(squares)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list(squares)
[]
>>> squares
<map object at 0x7f25a1cae320>
>>>

最佳答案

在 Python 3.x 中,map不返回列表对象,而是返回迭代器。

Return an iterator that applies function to every item of iterable, yielding the results.

基本上,它不会处理立即传递的可迭代对象的所有元素。当需要时,它一次只处理一个。

在您的情况下,range对象中的所有元素都会被一一处理,当所有元素都被处理时,map返回的迭代器对象就会耗尽(没有什么需要处理的)。这就是为什么当您第二次执行 list(squares) 时,您会得到空列表。

例如,

>>> squares = map(lambda x: x**2, range(10))
>>> next(squares)
0
>>> next(squares)
1
>>> next(squares)
4
>>> next(squares)
9

在这里,我们刚刚按需处理了前四项。这些值不是预先计算的,而是调用 lambda 函数,并将迭代器中的下一个值传递给方 block (range(10)),当您实际执行此操作时next(squares) 并返回值。

>>> list(squares)
[16, 25, 36, 49, 64, 81]

现在,仅处理迭代器中的其余项目。如果您尝试获取下一个项目,

>>> next(squares)
Traceback (most recent call last):
File "<input>", line 1, in <module>
StopIteration

由于 squares 已耗尽,StopIteration 被引发,这就是 list(squares) 没有获取任何元素来处理并返回的原因一个空列表。

关于python - Map对象转换为列表后清空自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35884181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com