作为一个新手,我正在尝试弄清楚filter()和map()之间的区别。我编写了一个示例脚本如下:
def f(x): return x % 2 == 0
def m(y): return y * 2
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
我们看到对于filter和map,我们传递一个列表,并将它们的输出分配给一个新列表。
这个脚本的输出是:
[1, 2, 3, 4]
[2, 4]
[1, 2, 3, 4]
[2, 4, 6, 8]
问题是,filter和map的函数调用看起来相同,如果我们交换传递给它们的函数的内容,它们会如何表现。
def f(x): return x * 2
def m(y): return y % 2 == 0
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
这导致了。
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[False, True, False, True]
该过滤器评估函数,如果返回真,则返回传递的元素。 这里是函数。
def f(x): return x * 2
等于
def f(x): return x * 2 != 0
相比之下,map评估函数表达式并将结果作为项返回。因此,filter始终期望其函数执行比较类型的任务以过滤元素,而map则期望其函数评估语句以获得某些结果。
这个理解正确吗?
filter?
或map?
,以简洁的形式阅读它们应该执行的操作。 - Uvar