在python中有一些有意思的内置函数,例如map()、filter()、reduce()函数,总结一下加深理解。
-
lambda关键字
-
map函数
-
filter函数
-
sorted函数
-
zip函数
以上四种函数均返回的是对象,需在外面加list并print才能显示
一、lambda表达式:匿名函数
原文地址:https://www.cnblogs.com/hf8051/p/8085424.html
-
lambda表达式,通常是在需要一个函数,但是又 不想费神去命名一个函数的场合下使用 ,也就是指匿名函数。
-
lambda所表示的 匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数 了,使用lambda就有点过于本末倒置了。
-
lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数
表达形式: lambda param1,…:return_value
和param相当于定义函数 时候传入的形参,return_value相当于return后面的值
1、应用在函数式编程中
像map、reduce、sorted、filter函数都支持函数作为参数,可以在其中嵌套使用,非常清晰明了。
# 需求:将列表中的元素按照绝对值大小进行升序排列
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
当然,也可以如下:
list1
=
[
3
,
5
,
-
4
,
-
1
,
0
,
-
2
,
-
6
]
def
get_abs
(
x
)
:
return
abs
(
x
)
sorted
(
list1
,
key
=
get_abs
)
只不过这种方式的代码看起来不够Pythonic
2、应用在闭包中
def
get_y
(
a
,
b
)
:
return
lambda
x
:
ax
+
b
y1
=
get_y
(
1
,
1
)
当然,也可以用常规函数实现闭包,如下:
def
get_y
(
a
,
b
)
:
def
func
(
x
)
:
return
ax
+
b
return
func
y1
=
get_y
(
1
,
1
)
二、map函数:
功能 : 求一个序列或者多个序列进行函数映射之后的值,就该想到map这个函数
语法
:
map(function, iterable)
:
接收两个参数,第一个为函数,第二个为序列,序列的每个元素执行函数操作,并传入新的map对象中。
参数 :
- function:用def或用lambda定义。
- iterable:一个或多个可迭代的对象,可以是字符串、列表、字典。
因为返回的是一个map对象,所以不能直接输出,可以在其外面套上list()来显示或者通过for循环append显示。
通过例子加深理解
def
square
(
x
)
:
return
x
*
x
a
=
list
(
map
(
square
,
[
1
,
2
,
3
]
)
)
print
(
a
)
#上下两段代码相等
a
=
list
(
map
(
lambda
x
:
x
**
2
,
[
1
,
2
,
3
]
)
)
print
(
a
)
输出结果 :[1, 4, 9]
map,不止能传入一个可迭代对象做为参数。也可以传入两个
ls1
=
'ABC'
ls2
=
'abc'
print
(
list
(
map
(
lambda
x
,
y
:
x
+
y
,
ls1
,
ls2
)
)
)
输出结果:[‘Aa’, ‘Bb’, ‘Cc’]
三、filter函数
功能 :filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数。
语法 :filter(function, iterable)
接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,返回True或False,将返回True的元素放到filter对象中。
参数 :
- function def或lambda定义
- iterable 元组、字符串、字典、列表
因为返回的是一个对象,所以不能直接输出,可以在其外面套上list()来显示
a
=
list
(
filter
(
lambda
x :x
%
2
==
0
,
[
1
,
2
,
3
,
4
]
)
)
print
(
a
)
输出结果:[2,4]
四、sorted函数
原文地址:https://www.cnblogs.com/sysu-blackbear/p/3283993.html
功能
:对List、Dict进行排序
语法
: sorted(iterable, cmp=None, key=None, reverse=False)
参数
:
iterable:迭代对象;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
五、zip函数
功能
:zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
如果各个可迭代对象的元素
个数不一致
,则返回的对象长度与
最短的可迭代对象
相同。
利用 * 号操作符,与zip相反,进行解压。
语法 : zip(iterable1,iterable2, …)
参数 :iterable – 一个或多个可迭代对象(字符串、列表、元祖、字典)
>>
>
a
=
[
1
,
2
,
3
]
#此处可迭代对象为列表
>>
>
b
=
[
4
,
5
,
6
]
>>
>
c
=
[
4
,
5
,
6
,
7
,
8
]
>>
>
zipped
=
zip
(
a
,
b
)
>>
>
zipped
<
zip
object
at
0x02B01B48
>
#返回的是一个对象
>>
>
list
(
zipped
)
[
(
1
,
4
)
,
(
2
,
5
)
,
(
3
,
6
)
]
#使用list()函数转换为列表
>>
>
list
(
zip
(
a
,
c
)
)
[
(
1
,
4
)
,
(
2
,
5
)
,
(
3
,
6
)
]
>>
>
zipped
=
zip
(
a
,
b
)
>>
>
list
(
zip
(
*
zipped
)
)
#解压也使用list进行转换
[
(
1
,
2
,
3
)
,
(
4
,
5
,
6
)
]