我想计算不超过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
添加回答
举报
0/150
提交
取消