函数的参数也是一个函数,就称为高阶函数
1.map
1.概述
map(func,*Iterable)
'''
参数1是一个函数,参数2是一个可迭代的对象,例如列表
将参数2里面的每一个元素作为参数传入到参数1这个方法中
最后返回一个新的列表
注意:*参数2是个不可数的,可以传递多个列表。那么此时对应的参数1函数的参数也一一对应
'''
2.实例
单个Iterable(可迭代对象)
a = [1,2,3,4,5,6,7,8,9]
# 将列表中每个元素转为字符串
m = map(str,a)
print(list(m)) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
多个Iterable(可迭代对象)
a=[1,2,3,4]
b=[10,20,30]
# 求这两个列表同索引元素的和
def fun(x,y):
return x+y
m=map(fun,a,b)
print(list(m)) # [11, 22, 33]
2.reduce
1.概述
reduce(func,Iterable)
"""
reduce(参数1,参数2)
参数1是一个函数,并且固定有两个参数。参数2是一个列表
运行情况:第一次将参数2里面的前两个元素作为参数传入到参数1的函数中。
第二次将第一次参数1函数的返回值作为第一个参数,再将参数2里的第三个元素作为第二个参数再次传入到参数1的函数中
以此类推。。。。。
最后返回参数1函数的最终返回值
"""
2.实例
from functools import reduce
a=[1,2,3,4,5,6,7,8,9,10]
#计算一个序列的求和
def sum(x,y):
return x+y
r = reduce(sum,a)
print(r)#55
from functools import reduce
a=[1,3,5,7,9]
#把序列a变成整数13579 将列表中每个元素乘10加上后一个元素
def fun(x,y):
return x*10+y
r = reduce(fun,a)
print(r)#13579
3.filter
1.概述
filter(func,Iterable)
'''
filter(参数1,参数2)
参数1是一个函数,固定有一个参数。参数2是一个列表
将参数2里面的每一个元素作为参数传入到参数1这个函数中
返回结果为真,就放入新列表,直到参数2的列表元素都传入了
最后返回一个新的列表
'''
2.实例
a=[1,2,3,4,5,6,7,8,9,10]
#在一个列表中,删掉偶数,保留奇数
def is_odd(n):
return n%2 == 1
f=filter(is_odd,a)
print(list(f)) # [1, 3, 5, 7, 9]
a=["A","","B",None,"C"," "]
#一个序列中的阿空字符串删掉
def not_empty(s):
return s and s.strip()
f=filter(not_empty,a)
print(list(f)) # ['A', 'B', 'C']
4.sorted
1.概述
sorted(Iterable[,reverse][,key])
'''
sorted(参数1[,reverse][,key])
参数1是一个列表
将参数1里面的元素进行排序
reverse是逆序排列,默认是False
key是传入一个函数,参数固定一个。将参数1中的每一个元素传入key这个函数中
返回一个新的排序后列表
'''
2.实例
基础用法
#对数值进行排序
#默认升序
s = sorted([42,422,4,2,-100,3,-10])#reverse=False
print("默认升序",s) # 默认升序 [-100, -10, 2, 3, 4, 42, 422]
#逆序排序
s = sorted([42,422,4,2,-100,3,-10],reverse=True)
print("降序",s) # 降序 [422, 42, 4, 3, 2, -10, -100]
#对字符串进行排序 ASCII码来判断
s = sorted(["abc","ad","ABC","D","d","C"])#reverse=False
print("默认升序",s) # 默认升序 ['ABC', 'C', 'D', 'abc', 'ad', 'd']
高级用法
#sorted是高阶函数,他还可以接收一个key函数来实现自定义的排序
#对数值列表,按绝对值的大小排序
s = sorted([42,422,4,2,-100,3,-10],key=abs)#reverse=False
print("默认升序",s) # 默认升序 [2, 3, 4, -10, 42, -100, 422]
str_list=['ab','a','abcde','abcd','abc']
#自定义按照字符串长度排序
print(sorted(str_list,key=lambda x:len(x))) # ['a', 'ab', 'abc', 'abcd', 'abcde']