作为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)
我们看到,对于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]
这显示filter对函数求值,如果为true,则返回传递的元素。这里的函数
def f(x): return x * 2
计算结果为
def f(x): return x * 2 != 0
相反,map计算函数表达式,并将结果作为项返回。因此,filter总是希望它的函数执行比较类型的任务来过滤出元素,而map则希望它的函数对语句求值以获得一些结果。
这种理解是正确的吗?
发布于 2017-12-01 00:55:18
它们的工作方式略有不同,但您的想法是正确的。
Map获取列表中的所有对象,并允许您对其应用函数Filter获取列表中的所有对象,并通过函数运行该列表,以创建一个新列表,其中包含该函数中返回True的所有对象。
下面是一个例子
def square(num):
return num * num
nums = [1, 2, 3, 4, 5]
mapped = map(square, nums)
print(*nums)
print(*mapped)
此命令的输出为
1 2 3 4 5
1 4 9 16 25
下面是一个过滤器的示例
def is_even(num):
return num % 2 == 0
nums = [2, 4, 6, 7, 8]
filtered = filter(is_even, nums)
print(*nums)
print(*filtered)
它的输出将是
2 4 6 7 8
2 4 6 8
发布于 2019-07-17 19:19:33
在map中:函数将应用于iterable的所有对象。在过滤器中:函数将只应用于那些在表达式中指定的条件下变为True的iterable对象。
发布于 2020-09-01 23:54:30
你的例子太准确了。在filter函数中,您应该传递一个函数和一个列表(该函数的计算结果必须为true或false)。如果传入函数的元素返回true,则filter函数会将传递的元素放入一个新列表中。其中,as map函数将接受一个元素,将其传递给一个函数,并返回函数的输出并将其存储到新的列表中。
https://stackoverflow.com/questions/47578353
复制相似问题