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

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 关注
  • 434 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号