ADB*_*ADB 10 python lambda python-3.x
我想计算直到n的平方和.假设n是4.然后此代码生成一个列表,其中包含0到4范围内的地图对象:
m = map(lambda x: x**2, range(0,4))
Run Code Online (Sandbox Code Playgroud)
足够轻松.现在调用m上的列表,然后求和:
>>> sum(list(m))
14
Run Code Online (Sandbox Code Playgroud)
意外的行为是,如果我再次运行最后一行,则总和为0:
>>> sum(list(m))
0
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为调用list(m)返回一个空列表,但我找不到这种行为的解释.有人可以帮我解决这个问题吗?
Łuk*_*ski 20
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |