作为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)
Run Code Online (Sandbox Code Playgroud)
我们看到,对于过滤器和映射,我们都传递了一个列表,并将其输出分配给新列表。
该脚本的输出是
[1, 2, 3, 4]
[2, 4]
[1, 2, 3, 4]
[2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
问题是过滤器和映射的函数调用看起来相同,因此如果我们交换传递给它们的函数的内容,它们的行为将如何。
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)
Run Code Online (Sandbox Code Playgroud)
这导致
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[False, True, False, True]
Run Code Online (Sandbox Code Playgroud)
这说明filter对函数进行求值,如果为true,它将返回传递的元素。这里的功能
def f(x): return x * 2
Run Code Online (Sandbox Code Playgroud)
评估为
def f(x): return x * 2 != 0
Run Code Online (Sandbox Code Playgroud)
相反,map评估函数表达式并将结果作为项目返回。因此,filter始终希望其功能执行比较任务类型以过滤出元素,而map希望其功能对语句进行评估以获得一些结果。
这种理解正确吗?
它们的工作原理有些不同,但是您有正确的想法。
Map接受列表中的所有对象,并允许您对其应用过滤器Filter接受列表中的所有对象,然后通过函数运行该对象,以创建一个新列表,其中所有对象均在该函数中返回True。
这是一个例子
def square(num):
return num * num
nums = [1, 2, 3, 4, 5]
mapped = map(square, nums)
print(*nums)
print(*mapped)
Run Code Online (Sandbox Code Playgroud)
这个的输出是
1 2 3 4 5
1 4 9 16 25
Run Code Online (Sandbox Code Playgroud)
这是过滤器的一个例子
def is_even(num):
return num % 2 == 0
nums = [2, 4, 6, 7, 8]
filtered = filter(is_even, nums)
print(*nums)
print(*filtered)
Run Code Online (Sandbox Code Playgroud)
这样的输出是
2 4 6 7 8
2 4 6 8
Run Code Online (Sandbox Code Playgroud)
小智 6
根据我的理解,以下是地图和过滤器之间的区别:
def even(num):
if(num % 2 == 0):
return 'Even'
Run Code Online (Sandbox Code Playgroud)
数字列表 = [1,2,3,4,5]
打印(列表(过滤器(偶数,num_list)))->>>>>>>输出:[2, 4]
print(list(map(even,num_list))) ->>>>>>> 输出:[无,'偶数',无,'偶数',无]
因此,我们可以这样说: filter():格式化包含满足特定条件的元素的新列表。map():函数迭代给定可迭代中的所有项目,并执行我们作为参数传递的函数。
| 归档时间: |
|
| 查看次数: |
6410 次 |
| 最近记录: |