为了账号安全,请及时绑定邮箱和手机立即绑定

Python:在地图对象上两次调用“列表”

Python:在地图对象上两次调用“列表”

肥皂起泡泡 2019-11-04 11:06:54
我想计算不超过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)返回一个空列表,但是我找不到这种行为的解释。有人可以帮我这个忙吗?
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信