# python之 高阶函数

21 篇文章 0 订阅

### 高阶函数

map

语法 :  map(func,Iterable)

把Iterable中的数据一个一个拿出来,扔到func函数中做处理
把处理之后的结果放到迭代器当中,最后返回迭代器

Iterable : 可迭代性数据(容器类型数据 range对象 迭代器)



(1) lst= [“1”,“2”,“3”,“4”] => [1,2,3,4]

lst =  ["1","2","3","4"]
# 常规写法
lst_new=[]
for i in lst:
lst_new.append(int(i))
print(lst_new)
# map 改写
it = iter(int,lst)
# 获取迭代器中的数据
1.next
res= next(it)
print(res)
2.for
for i in it:
print(i)
3.for + next
for i in range(4):
res= next(it)
print(res)
4. list 强转
print(list(it))


(2) [1,2,3,4] =>[2,8,24,64]

lst = [1,2,3,4]
# 常规写法
lst_new= []
for i in lst:
res = i <<i
lst_new.append(res)
print(lst_new)
#map改写  (参数和返回值一定要写)
def func(n):
return n<<n
lst = [1,2,3,4]
it = map(func,lst)
print(list(it))
# lambda + map 改写
it = map(lambda n: n<<n ,lst)
print(list(it))


(3){97:“a”,98:“b”,99:“c”} =>[97,98,99]

dict= {97:"a",98:"b",99:"c"}
# 常规写法
dic={"a":97,"b":98,"c":99}
def func(lst):
lst_new =[]
for i in lst:
res = dic[i]
lst_new.append(res)
return lst_new
res= func(lst=["a","b","c"]
print(res)

(2)将键值对反转
dic= {97:"a",98:"b",99:"c"}
dic_new = {}
for k,v in dic.items():
dic_new[v]=k
print(dic_new)
lst = ["a","b","c"]
lst_new=[]
for i in lst:
res= dic_new[i]
lst_new.append(res)
print(lst_new)
# map 改写
def func(n):
dic = {97:"a",98:"b",99:"c"}
dic_new={}
for k,v in dic.items():
dic_new[v]=k
print(dic_new)
return dic_new[n]
lst = ["a","b","c"]
it = map(func,lst)
print(list(it))


filter

语法 : filter(func,iterable)

return True  当前这个数据保留
return False 当前这个数据舍弃

iterable : 可迭代型数据(容器类型数据,range对象,迭代器)



(1)lst = [1,2,3,4,5,6,7,8,9,10]=>[2,4,6,8,10]

# 常规写法
lst = [1,2,3,4,5,6,7,8,9,10]
lst_new=[]
for i in lst:
if i % 2 ==0:
lst_new.append(i)
print(lst_new)

# filter改写
def func(i):
if i % 2==0:
return True
else:
return False
it = filter(func,lst)
#获取数据
1.next 调用
res= next(it)
print(res)
2.for
for i in it:
print(i)
3.for + next
for i in range(3):
res= next(it)
print(res)
4.list
print(list(it))
# filter + lambda 改写
it = filter(lambda i : True if i % 2 ==0 else False , lst)
print(list(it))


reduce

语法 : reduce(func,iterable)

先把iterable中的前两个值拿出来,扔到func当中做运算,
把计算的结果和iterable中的第三个元素在扔到func当中做运算,
再把结果算出来,和第四个元素做运算,以此类推
直到所有结果运算完毕.返回该结果

iterable : 可迭代型数据(容器类型数据,range对象,迭代器)



(1) lst=[5,4,8,8] => 整型5488

form  functools  import  reduce
# 常规写法
# 方法一
lst = [5,4,8,8]
strvar = ""
for i in lst:
strvar +=str(i)
print(int(strvar))
# 方法二
lst = [5,4,8,8]
it = iter(lst)
num1=next(it)
num2= next(it)
num = num1*10+num2
for i in it:
num = num*10+i
print(num)

# **reduce 改写**
def func(x,y):
return x*10+y
lst= [5,4,8,8]
res= reduce(func,lst)
print(res)

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


(2) “789” =>数字7,8,9

def func1(x,y):
return x*10 + y
def func2(n):
dic = {"7":7,"8":8,"9":9}
return dic[n]
it = map(func2,"789")
res= reduce(func1,it)
print(res)


sorted

语法 : sorted(iterable,key=函数,reverse=False)

key    : 指定自定义函数或内置函数
reverse : 代表升序或者降序 , 默认是升序(从小到大排序) reverse=False



(1) 默认从小到大排序
lst= [1,2,-23,3,100]
print(sorted(lst))
(2) recerse = True 从大到小排序
res= sorted(lst,reverse = True)
print(res)
(3) 按照绝对值排序 abs
res =sorted(lst,key = abs)
print(res)
(4)自定义函数进行排序
def func(n):
return n % 10
lst = sorted(lst,key=func)
print(lst)

sorted 和 sort 的区别
sorted 可以排序一切容器类型数据,sort只能排序列表
sorted 返回的是新列表,sort是基于原有的列表进行修改

• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 0
评论

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