python 高阶函数(map filter reduce sorted)

1.高阶函数
能够把函数当成参数传递的就是高阶函数 map fillter reduce sorted
2.map
map(func.iterable)
功能:把iterable里面的数据一个一个拿出来,放到func函数中进行处理,把处理的结果放到迭代器中,返回迭代器
参数:
func 自定义函数 或者 内置函数
iterable 可迭代对象(容器类型数据 range 迭代器)
返回值:
迭代器

(1)代码示例:

#['1','2','3','4']==>[1,2,3,4]
#常规
lst=['1','2','3','4']
intlst=[]
for i in lst:
	res=int(i)
	intlst.append(i)
#map改写
from collections import Iterator,Iterable
it=map(int,lst)
print(it)
res=isinstance(it,Iterator)
print(res)

(2)获取迭代器数据的方法介绍

#1.next 获取迭代器的元素
res=next(it)
print(res)
res=next(it)
print(res)
res=next(it)
print(res)
res=next(it)
print(res)
#2for获取迭代器中的元素
print('==================')
it=map(int,lst)
for i in it:
	print(i)
#3.for + next 获取迭代器中的元素
it=map(int,lst)
for i in range(2):
	res=next(it)
	print(res)

#4.list强转迭代器,返回一个列表
it=map(int,lst)
lst=list(it)
print(lst)

(3)map应用小例

##2.[1,2,3,4]===>[1,4,9,16]
lst=[1,2,3,4]
lst1=[]
for i in lst:
	res=i**2
	lst1.append(res)
print(lst1)
def func(n):
	return n**2
it=map(func,lst)
#强转成列表,一次性拿到所有数据
print(list(it))
#lambda
it=map(lambda n : n**2,lst)
print(list(it))

##3.dic={97:'a',98:'b',99:c}给你['a''b''c']返回[97,98,99]
dic={97:'a',98:'b',99:'c'}
lst1=['a','b','c']
lst=dic.items()
dic1={}
for k,v in lst:
	dic1[v]=k
lst2=[]
for i in lst1:
	res=dic1[i]
	lst2.append(res)
print(lst1)
def func(n):
	dic = {97: 'a', 98: 'b', 99: 'c'}
	lst = dic.items()
	dic1 = {}
	for k, v in lst:
		dic1[v] = k
	return dic1[n]
it=map(func,lst1)
print(list(it))

3.filter
功能:在自定义函数中,过滤数据,如果返回True则保留可迭代对象对应数据,返回False则丢弃对应数据
格式:
filter(func,iterable)
func 自定义函数
iterable 可迭代对象(容器数据类型,range,迭代器)
返回值:
迭代器
(1)定义小例

##1.[1,2,3,4,5,6,7,8,9]保留奇数
##常规
lst=[1,2,3,4,5,6,7,8,9]
lst1=[]
for i in lst:
	if i%2==1:
		lst1.append(i)
print(list(lst1))

##filter改写
def func(n):
	if n%2==1:
		return True
	else:
		return False
res=filter(func,lst)
print(list(res))

4.reduce
功能:一次性从iterable当做拿出2个值,放到func函数
把运算的结果再和iterable的第三个值继续放到func中做运算
…以此类推
最后返回计算结果
格式:
from functools import reduce
reduce(func,iterable)
func 自定义函数
iterable 可迭代数据:容器类型数据 range对象 迭代器
返回值:
最后的计算结果
(1)示范小例

###[5,3,2,1]==>5321
#常规方法
lst=[5,3,2,1]
strvar=''
for i in lst:
	strvar+=str(i)
print(int(strvar))

#方式二
num1=int(lst[0])
num2=int(lst[1])
total=num1*10+num2
for i in range(2,len(lst)):
	total=total*10+lst[i]
print(total)

##reduce改写
from functools import reduce
def func(x,y):
	return x*10+y
res=reduce(func,lst)
print(res)

##lambda匿名函数改写
res=reduce(lambda x,y:x*10+y,lst)
print(res)

##'789'==>789不使用int强转
dic={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
strvar='789'
lst=[]
for i in strvar:
	lst.append(dic[i])
res=reduce(lambda x,y:x*10+y,lst)
print(res)

5.sorted
功能:排序
格式: sorted(iterable,reverse=True,key=func) 默认从小到大
iterable 可迭代对象(容器数据类型 range 迭代器)
reverse 反转 倒序 默认为False
key 自定义函数 内置函数
返回值:
排序后的列表
.sort() 基于原有列表进行排序,返回排序后的列表
sorted(iterable,reverse=True,key=func) 所有容器类型数据都能排序,返回排序后全新的列表
(1)示范小例:

##1.默认从小到大排序:返回排序列表
##排序列表
lst=[4,9,2,6,66]
lst1=sorted(lst)
print(lst1)
##排序元组
tup=(4,9,2,6,66)
lst1=sorted(tup)
print(lst1)
###排序集合
set={4,9,2,6,66}
lst1=sorted(set)
print(lst1)
###排序字典:默认排序键
dic={'4':2,'5':5,'88':33,'23':44}
lst1=sorted(dic)
print(lst1)

##从大到小排序
lst1=sorted(lst,reverse=True)
print(lst1)

##通过内置函数排序
##绝对值abs
lst=[4,-9,2,-6,-66]
lst1=sorted(lst,key=abs)
print(lst1)

##通过自定义函数排序
def func(n):
	return n%10
lst=[4,9,2,6,66]
lst1=sorted(lst,key=func)
print(lst1)
###lambda改写
lst1=sorted(lst,key=lambda n:n%10)
print(lst1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值