Python:在地图对象上调用'list'两次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:在地图对象上调用'list'两次相关的知识,希望对你有一定的参考价值。

我想计算直到n的平方和。假设n是4.然后此代码生成一个列表,其中包含0到4范围内的地图对象:

m = map(lambda x: x**2, range(0,4))

足够轻松。现在调用m上的列表,然后求和:

>>> sum(list(m))
14

意外的行为是,如果我再次运行最后一行,则总和为0:

>>> sum(list(m))
0

我怀疑这是因为调用list(m)返回一个空列表,但我找不到这种行为的解释。有人可以帮我解决这个问题吗?

答案

map在Python 3中返回一个有状态迭代器。状态迭代器可能只被消耗一次,之后它就会耗尽并且不会产生任何值。

在您的代码段中,您会多次使用迭代器。 list(m)每次尝试重新创建列表,并且对于第二次和下次运行创建的列表将始终为空(因为源迭代器在第一次list(m)操作中被使用)。

只需将迭代器转换为列表一次,然后在上述列表中操作。

m = map(lambda x: x**2, range(0,4))
l = list(m)
assert sum(l) == 14
assert sum(l) == 14

以上是关于Python:在地图对象上调用'list'两次的主要内容,如果未能解决你的问题,请参考以下文章

Python:不能在类中使用函数两次,TypeError:'list'对象不可调用,为什么? [关闭]

Python 批量获取地点经纬度坐标,并利用geopandas在地图上绘制经纬度的点

Python 批量获取地点经纬度坐标,并利用geopandas在地图上绘制经纬度的点

尝试在null对象上调用接口方法'int java.util.List.size()'如何解决它? [重复]

081 python中一切皆对象

Python:在生成器对象上调用 list() 会产生不正确的结果