【发布时间】:2021-12-22 01:05:43
【问题描述】:
作为 python 新手,我只是想弄清楚 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)
我们看到过滤器和映射都传递了一个列表并将它们的输出分配给一个新列表。
这个脚本的输出是
[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 期望它的函数评估一个语句以获得一些结果。
这种理解正确吗?
【问题讨论】:
-
阅读随附的文档字符串可以加深理解。在 python 控制台中输入
filter?或map?并以简洁的形式阅读它们应该做什么。
标签: python