我想计算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中的有状态迭代器.有状态迭代器可能只使用一次,之后它将耗尽,并且不会产生任何值.

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

只需将迭代器转换为列表一次,然后对所述列表进行操作.

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

Python-3.x相关问答推荐

Python ModuleNotFound错误,即使安装了模块

PythonPandas -通过知道位置(Loc)而不是索引来删除行

我们可以在每个可以使用 Pandas Join 的用例中使用 Pandas merge 吗?

Heroku 中的未知错误代码缺少一个或多个参数

从另一个云函数调用带有仅允许内部流量标志的云函数时出现问题

如何将函数映射到所有命名元组的元素?

aiogram机器人中处理文本输入异常而不是按钮点击的回调函数.

它们是否同样存储在python3的内存中?

Python 列表求和所有出现的保留顺序

如何向 scikit-learn 函数添加类型提示?

判断 gekko 中的表达式

如何在 on_ready 事件中使用 change_presence? (discord.py)

为什么 setattr 在绑定方法上失败

在 Pandas 数据框中显示对图

如何制作函数Collection

混合全局/参数和名为top的函数的奇怪python行为

Windows 下 Python 3.x 的 OpenCV

为什么变量 = 对象不像变量 = 数字那样工作

调用 Python doctest 时如何启用省略号?

print(... sep='', '\t' ) 是什么意思?