我正在使用Jupyter笔记本,为了练习,我想在代码中使用lambda
和filter
函数从给定列表中滤除偶数,该偶数由1到10组成。
该代码显示了我尝试执行的操作,但是输出不是我期望的。我把代码放了一段时间,然后尝试使用一个map()
函数,这次是对列表的值求平方,但是它也没有给出正确的输出。
该filter
代码:
l = [1,2,3,4,5,6,7,8,9,10]
evenNumbers = filter(lambda x: x % 2 == 0, l)
print(evenNumbers)
#response
<filter object at 0x000002023F87F5F8>
该map
代码:
l = [1,2,3,4,5,6,7,8,9,10]
squaredNumbers = map(lambda x: x ** 2, l)
print(squaredNumbers)
#response
<map object at 0x000002023F85BA90>
我希望输出是values 2, 4, 6, 8, 10
,在第二种情况下是一个正方形列表。相反,代码给了我以上的答案。我很确定问题出在lambda
哪里,但这是什么?
阅读的文档map()
(对也是一样filter()
),它明确指出:
返回一个迭代器适用功能,可迭代的每一个项目...
因此,这是预期的行为,因为它不会一次性计算所有元素(节省内存和CPU时间),但会等到您需要它们时:
>>> map(lambda x: x ** 2, l)
<map object at 0x7f375ec905f8>
您可以遍历结果:
>>> for e in map(lambda x: x ** 2, l):
... print(e)
1
4
9
16
25
36
49
64
81
100
或将其转换为列表或元组:
>>> list(map(lambda x: x ** 2, l))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句