为什么我的lambda函数在使用filter()和map()之类的函数时不返回任何值?

2024-09-29 22:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Jupyter notebook,为了练习,我想在代码中使用lambdafilter函数来过滤给定列表中的偶数,该列表由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,但它是什么?你知道吗


Tags: lambda函数代码map列表objectresponsejupyter
2条回答

如果我们尝试在python2和python3中执行这些语句集

对于filter()

python2的输出将是~[2, 4, 6, 8, 10]

而python3的输出是~<filter object at 0x1014ba240>

map()的情况类似。你知道吗

原因是这些函数在python2中返回一个列表,而在python3中返回一个迭代器。你知道吗

为了能够像python2那样使用它们的结果,您所要做的就是在使用结果之前将其转换为一个列表。你知道吗

阅读^{}的文档(同样适用于filter()),它清楚地指出:

Return an iterator that applies function to every item of iterable ...

因此,这是预期的行为,因为它不会一次性计算所有元素(节省内存和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]

相关问题 更多 >

    热门问题