天天看点

Python常见高阶函数及其使用-map、reduce、filter、sorted、zip

Python常见高阶函数及其使用-map()、reduce()、filter()、sorted()、sum()、zip()

1、map()函数

语法:map(func,iter1)

func:函数,有且只有一个参数

iter1:可迭代对象

功能:将可迭代对象中的元素依次取出作用于func函数,并将作用的结果作为迭代器返回。

#实现将列表中的字符串转为int的功能
list1 = ["1", "2", "233", "22", "45"]
print(list(map(int,list1)))
#结果:[1, 2, 233, 22, 45]

#使用map函数获取[1,4,9,16,...,10000]
print(list(map(lambda:x:x**2,range(1,101))))
#结果[1,4,9,16,...太长省略不写系列...,10000]
           

2、reduce()函数

语法:functools.reduce(func,iter1)

func:函数,有且只有两个参数

iter1:可迭代对象

功能:将可迭代对象中的元素依次取出作用于func函数,并将作用的结果返回。

import functools
import operator
#对list1中的元素求和,使用一行代码实现
list1 = [1, 2, 233, 22, 45]
print(functools.reduce(operator.add,list1))
#对对list2中的元素求和,使用一行代码实现
list2 = ["1", "2", "233", "22", "45"]
print(functools.reduce(operator.add,map(int,list2)))#operator.add为内置求和函数
#求100!
print(functools.reduce(lambda x,y:x*y,range(1,100)))
           

3、filter()函数

语法:filter(func,iter1)

func:函数,有且只有一个参数,返回值必须是bool值

iter1:可迭代对象

功能:将数据进行过滤,将iter1中的元素依次取出,作用于func,根据func返回的是True还是False决定是否保留该元素。返回True的时候是保留该元素,返回False去除该元素。

#需求:将爱好无的元素剔除
data = [["张三", 28, "吃"], ["tom", 25, "无"], ["hanmeimei", 26, "金钱"]]
print(list(filter(lambda x:False if x[-1]=="无" else True,data)))

#需求:去除list1中的偶数
list1 = [1,2,3,41,23,1,2,13,4,4,12,123]
print(list(filter(lambda x: True if x%2 else False,list1)))
           

4、sorted()函数

语法:sorted(iterable,key,reverse)

iterable:可迭代对象

key:比较规则,用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项

reverse:排序规则,reverse = True 降序 、 reverse = False 升序,默认升序

功能:将可迭代对象依次作用于key后面的函数,然后根据作用的结果进行排序。

#对list1进行排序
list1 = [1,2,3,41,23,1,2,13,4,4,12,123]
print(list(sorted(list1,reverse = True)))
#结果:[123, 41, 23, 13, 12, 4, 4, 3, 2, 2, 1, 1]

#以列表中字符串的长度来进行排序
list2 = ["hello","12","sde4er","ass","4erre2dfff"]
print(list(sorted(list2,key=len,reverse=True)))
#结果:['4erre2dfff', 'sde4er', 'hello', 'ass', '12']
           

5、sum()函数

语法:sum(iter)

iter:可迭代对象,元素必须是number类型

功能:返回可迭代对象相加的结果

list1 = [1,2,3,41,23,1,2,13,4,4,12,123]
print(sum(list1))
#结果:229
           

6、zip函数

语法:zip(iter1,iter2,…)

功能:将多个可迭代对象的对应位置的数据进行打包处理,长度由最短的决定,返回一个打包好的zip对象[迭代器]

语法:zip(*zipobj)

功能:将zip对象进行解包处理

'''使用zip函数实现:
dict1 = {1:"hello",2:"good",3:"nice"}
==> dict2 = {"hello":1,"good":2,"nice":3}'''
dict1 = {1: "hello", 2: "good", 3: "nice"}
print(dict(zip(dict1.values(),dict1.keys())))