我想计算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)
返回一个空列表,但我找不到这种行为的解释.有人能帮我吗?
我想计算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