测试环境:
操作系统: Window 10
工具:Pycharm
Python: 3.7
filter
和map
是 python 中常常被使用的两个方法。这两个方法的使用方法很相似:
相同点:
1. 第一个参数都是一个函数
2. 第二个参数是一个可迭代序列
3. 返回可迭代对象
不同点:
1. filter的第一个参数是函数,这个函数是用来判断条件的
2. map的第一个函数也是函数,但这个函数是用来做映射的。
map
a = [3,4,1,2,54,6]
b = list(map(lambda x: x**2,a))
print(b)
# [9, 16, 1, 4, 2916, 36]
在map
中,第一个参数是一个lambda
函数,作用是把输入元素乘方,结果作为输出。第二个参数就是可迭代序列a
,a
的每一个元素都会经过lambda
函数变成另一个数字。所有经过lambda
函数的数字的输出都作为map
函数的输出,形成一个可迭代序列。然后用list
函数把可迭代序列变成list形式。
我的理解:原文这里有点绕,我理解为数学中的函数映射关系,去搜索了一下 map
的英文含义,也就是所谓的映射,和原文说的映射差不多一个意思,不过这里理解英语含义比较方便些,理解了英文含义,其实更有助与理解 map
这个函数的用法
注意翻译加粗的文字
map n. 地图;分布图;(基因)图谱,染色体图;天体图;映射;<非正式>脸,面孔 v.
绘制……的地图;了解信息;详细安排;映射;与……有关,与……有联系;使(基因)在染色体上定位 【名】 (Map)(美)马普(人名)
所谓映射指的是 A 映射 B (A —> B) 这中间肯定有一个映射关系,你可以理解为转换关系,通过一个数学上的四则运算( + - * /
不过这里可是编程,自然需要有模运算 %
) ,变换为一个 B 的集合,大概就是另外一个数据集合,输出 B
映射: x ——> f(x)
filter
a = [3,4,1,2,54,6]
b = list(filter(lambda x:x>2,a))
print(b)
# [3, 4, 54, 6]
filter
的第一个参数是lambda
函数,该函数代表了一个条件,只要a
中的元素满足了这个条件,才能作为 filter
的输出中的一个元素。
注意翻译加粗的文字
filter 英 [ˈfɪltə®] 美 [ˈfɪltər] n.
过滤器;滤光器,滤声器,滤波器;过滤程序,过滤软件;(指示车辆转弯的)分流指示灯 v.
过滤;渗入,透过;(消息、信息等)慢慢传开,走漏;缓慢进入,陆续步入;(车辆)看到分流指示灯的信号后转弯;(用程序)筛选 【名】
(Filter)(德)菲尔特(人名)
根据原文和翻译的理解:filter
方法是一个过滤器,并且它的第一个函数,是一个判断函数,执行的是选择逻辑,返回的值,要么是真 True
的,要么是假 False
,真就把 参数留下来,假
的就把参数 丢弃,一次传一个参数。filter
方法对参数进行判断是否保留下来作为输出结果,而不是输出一个借由参数变换后的结果集合,请不要和 map
方法弄混了
filter
的第二个函数参数传递逻辑参考如下 :
a = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
for i in a:
print(i+' ', end='')
# 1 2 3 4 5 6 7 8 9
总结:
map
方法(函数) 作逻辑运算( and or & ...
)/运算符运算处理(+ - * / %
) 等等,也就是 map
一定会加工你的参数,把你参数变成它的形状 。
filter
方法不会去把你的参数怎么样,但是它像一个 HR 一样,决定了你是否可以留下来成为新员工
返回值类型是新的可迭代对象。
还有一个比喻是金子被过滤器(条件)过滤了,水不要。
参考链接:
Python中map和filter的使用方法