猿问

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

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


肥皂起泡泡
浏览 413回答 2
2回答

斯蒂芬大帝

map 在Python 3中返回一个有状态的迭代器。有状态的迭代器在耗尽后可能只消耗一次,并且不产生任何值。在您的代码段中,您多次使用迭代器。list(m)每次尝试重新创建列表时,对于第二次和下一次运行,创建的列表将始终为空(因为在第一次list(m)操作中消耗了源迭代器)。只需将迭代器转换为列表一次,然后再对列表进行操作。m = map(lambda x: x**2, range(0,4))l = list(m)assert sum(l) == 14assert sum(l) == 14
随时随地看视频慕课网APP

相关分类

Python
我要回答