在地图对象上调用“列表”两次[重复]
- 2025-04-10 09:44:00
- admin 原创
- 21
问题描述:
我想计算 n 以内的平方和。假设 n 为 4。然后此代码生成一个范围在 0 到 4 之间的映射对象列表:
m = map(lambda x: x**2, range(0,4))
很简单。现在在 m 上调用 list,然后求和:
>>> sum(list(m))
14
意外的行为是,如果我再次运行最后一行,总和为 0:
>>> sum(list(m))
0
我怀疑这是因为调用list(m)
返回了一个空列表,但我找不到这种行为的解释。有人能帮我解决这个问题吗?
解决方案 1:
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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD