首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >filter()和map()之间的Python差异

filter()和map()之间的Python差异
EN

Stack Overflow用户
提问于 2017-12-01 00:40:09
回答 6查看 17.9K关注 0票数 10

作为python的新手,我只是想弄清楚filter()和map()之间的区别。我编写了一个示例脚本,如下所示:

代码语言:javascript
复制
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,我们都传递了一个列表,并将它们的输出分配给一个新的列表。

此脚本的输出为

代码语言:javascript
复制
[1, 2, 3, 4]
[2, 4]
[1, 2, 3, 4]
[2, 4, 6, 8]

出现的问题是,filter和map的函数调用看起来是一样的,那么如果我们交换传递给它们的函数的内容,它们将如何表现。

代码语言:javascript
复制
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)

这会导致

代码语言:javascript
复制
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[False, True, False, True]

这显示filter对函数求值,如果为true,则返回传递的元素。这里的函数

代码语言:javascript
复制
def f(x): return x * 2

计算结果为

代码语言:javascript
复制
def f(x): return x * 2 != 0

相反,map计算函数表达式,并将结果作为项返回。因此,filter总是希望它的函数执行比较类型的任务来过滤出元素,而map则希望它的函数对语句求值以获得一些结果。

这种理解是正确的吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-12-01 00:55:18

它们的工作方式略有不同,但您的想法是正确的。

Map获取列表中的所有对象,并允许您对其应用函数Filter获取列表中的所有对象,并通过函数运行该列表,以创建一个新列表,其中包含该函数中返回True的所有对象。

下面是一个例子

代码语言:javascript
复制
def square(num):
    return num * num

nums = [1, 2, 3, 4, 5]
mapped = map(square, nums)

print(*nums)
print(*mapped)

此命令的输出为

代码语言:javascript
复制
1 2 3 4 5
1 4 9 16 25

下面是一个过滤器的示例

代码语言:javascript
复制
def is_even(num):
    return num % 2 == 0


nums = [2, 4, 6, 7, 8]
filtered = filter(is_even, nums)

print(*nums)
print(*filtered)

它的输出将是

代码语言:javascript
复制
2 4 6 7 8
2 4 6 8
票数 17
EN

Stack Overflow用户

发布于 2019-07-17 19:19:33

在map中:函数将应用于iterable的所有对象。在过滤器中:函数将只应用于那些在表达式中指定的条件下变为True的iterable对象。

票数 5
EN

Stack Overflow用户

发布于 2020-09-01 23:54:30

你的例子太准确了。在filter函数中,您应该传递一个函数和一个列表(该函数的计算结果必须为true或false)。如果传入函数的元素返回true,则filter函数会将传递的元素放入一个新列表中。其中,as map函数将接受一个元素,将其传递给一个函数,并返回函数的输出并将其存储到新的列表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47578353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档