我正在使用Jupyter notebook,为了练习,我想在代码中使用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>
我希望输出是值2, 4, 6, 8, 10
,在第二种情况下是一个正方形列表。相反,代码给了我上面的回答。我很确定问题出在lambda
,但它是什么?你知道吗
如果我们尝试在python2和python3中执行这些语句集
对于
filter()
python2的输出将是~
[2, 4, 6, 8, 10]
而python3的输出是~
<filter object at 0x1014ba240>
与
map()
的情况类似。你知道吗原因是这些函数在python2中返回一个列表,而在python3中返回一个迭代器。你知道吗
为了能够像python2那样使用它们的结果,您所要做的就是在使用结果之前将其转换为一个列表。你知道吗
阅读^{} 的文档(同样适用于
filter()
),它清楚地指出:因此,这是预期的行为,因为它不会一次性计算所有元素(节省内存和CPU时间),而是等待您需要它们:
您可以对结果进行迭代:
或将其转换为列表或元组:
相关问题 更多 >
编程相关推荐