高阶函数
map
-
map(function, iterable)函数接收两个参数,一个是函数名,一个是Iterable
-
重点:一一映射,可改变
-
返回1到10的平方
-
def f(x): return x ** 2 ret = map(f, range(10)) print(next(ret)) print(list(ret)) # 因为0已经被上面的next方法取出了,所以在这列表输出中没有0的元素
0
[1, 4, 9, 16, 25, 36, 49, 64, 81]
-
-
map函数也可穿多个参数,会已最短的那个可迭代对象取值完毕作为程序结束
-
li1 = [1,2,3,4,5] li2 = ['a','b','c'] ### print(list(map(lambda a,b:(a,b), li1, li2)))
[(1, ‘a’), (2, ‘b’), (3, ‘c’)]
-
-
filter
-
filter(function, iterable)
-
重点:不可改变可迭代对象中原本的值
-
保留偶数,去除奇数
-
def ou(i): return i%2 == 0 li = [2,1,3,4,5,6] ret = filter(ou, li) print(list(ret))
[2, 4, 6]
-
-
去掉bool值为False的元素
-
def f(i): return i print(list(filter(f, ['A','B',None,'C','','a',1,0])))
[‘A’, ‘B’, ‘C’, ‘a’, 1]
-
-
sorted
-
sorted(iterable, key=)。key:排序规则,它还可以接收一个key函数来实现自定义的排序
key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
-
按绝对值排序
-
li = [36, 5,2, -12, 9, -21] print(sorted(li, key=abs))
[2, 5, 9, -12, -21, 36]
-
-
忽略元素的首字母大小写排序
-
myli = ['bob', 'about', 'Zoo', 'Credit'] def f(i): return i.lower() print(sorted(myli, key=f))
[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]
-
-
reduce
-
reduce(function, iterable)
-
eg:reduce(f, [x1, x2, x3, x4]) => f(f(f(x1, x2), x3), x4)
-
将[1, 3, 5, 7, 9]转化为13579
-
from functools import reduce # def sup_add(x, y): return x * 10 + y print(reduce(sup_add, [1, 3, 5, 7, 9]))
13579
-
-
得到累乘的结果
-
print(reduce(lambda x, y: x * y, [1, 2, 3, 4]))
24
-
-