标签:python res dic 8.02 lst func print new lx
一.高阶函数 : 能够把函数当成参数传递的就是高阶函数
(1)map
map(func,Iterable)
功能:处理数据
把Iterable中的数据一个一个拿出来,扔到func函数中做处理
把处理之后的结果放到迭代器当中,最后返回迭代器
参数:
func : 自定义函数 或 内置函数
Iterable : 可迭代性数据(容器类型数据 range对象 迭代器)
返回值:
迭代器
<1>lst = ["1","2","3","4"] # [1,2,3,4]
①常规写法
1 lst = ["1","2","3","4"] 2 lst_new = [] 3 for i in lst: 4 lst_new.append(int(i)) 5 print(lst_new)
②map改造
1 lst = ["1","2","3","4"] 2 it = map(int,lst) 3 print(list(it))
<2>lst = [1,2,3,4] => [2,8,24,64]
①常规写法
1 lst = [1,2,3,4] 2 lst_new = [] 3 for i in lst: 4 res = i << i 5 lst_new.append(res) 6 print(lst_new)
②map改造
参数和返回值return一定要写
1 def func(n): 2 return n << n 3 lst = [1,2,3,4] 4 if = map(func,lst)
③lambda + map
1 it = map(lambda n : n<<n , lst) 2 print(list(it))
<3>dic = {97:"a",98:"b",99:"c"} # ["a","b","c"] => ascii [97,98,99]
常规写法
将键值对反转
1 dic = {97:"a",98:"b",99:"c"} 2 dic_new = {} 3 for k,v in dic.items(): 4 dic_new[v] = k 5 print(dic_new) 6 7 lst = ["a","b","c"] 8 lst_new = [] 9 # 遍历列表 10 for i in lst: 11 # 通过键取值 12 res = dic_new[i] 13 # 把值追加到新的列表中 14 lst_new.append(res) 15 # 返回新列表 16 print(lst_new)
map改造
1 def func(n): 2 # 原字典 3 dic = {97:"a",98:"b",99:"c"} 4 # 新字典 5 dic_new = {} 6 # 遍历原字典 7 for k,v in dic.items(): 8 # 更换键值对 9 dic_new[v] = k 10 print(dic_new) # {'a': 97, 'b': 98, 'c': 99} 11 # 通过键来获取值 12 return dic_new[n] 13 lst = ["a","b","c"] 14 it = map(func,lst) 15 print(list(it))
(2)filter
filter(func,iterable)
功能: 过滤数据
return True 当前这个数据保留
return False 当前这个数据舍弃
参数:
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值:
迭代器
<1>lst = [1,2,3,4,5,6,7,8,9,10] 取偶
①常规写法
1 lst = [1,2,3,4,5,6,7,8,9,10] 2 lst_new = [] 3 for i in lst: 4 if i % 2 == 0: 5 lst_new.append(i) 6 print(lst_new
②filter改写
1 def func(): 2 if i % 2 == 0: 3 return True 4 else: 5 return False 6 it = filter(func,lst) 7 print(list(it))
③filter + lambda 改写
1 lst = [1,2,3,4,5,6,7,8,9,10] 2 it = filter(lambda i: True if i %2==0 else False,lst) 3 print(lst)
(3)reduce
reduce(func,iterable)
功能:计算数据
先把iterable中的前两个值拿出来,扔到func当中做运算,
把计算的结果和iterable中的第三个元素在扔到func当中做运算,
再把结果算出来,和第四个元素做运算,以此类推
直到所有结果运算完毕.返回该结果
参数:
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值:
计算之后的结果
from functools import reduce
<1>lst = [5,4,8,8] => 整型5488
①常规写法
1 lst = [5,4,8,8] 2 strvar = "" 3 for i in lst: 4 strvar += str(i) 5 res = int(strvar) 6 print(res , type(res))
②使用迭代器
1 from collections import Iterator,Iterable 2 lst = [5,4,8,8] 3 it = iter(lst) 4 print(isinstance(it , Iterator)) 5 print(isinstance(it , Iterable)) 6 num1 = next(it) 7 num2 = next(it) 8 print(num1,num2) 9 num = num1 * 10 + num2 10 print(num) # 54 11 for i in it: 12 num = num * 10 + i # 54 * 10 + 8 => 548 13 print(num, type(num))
③reduce 改造
1 def func(x,y): 2 return x*10+y 3 lst = [5,4,8,8] 4 res = reduce(func,lst) 5 print(res,type(res))
④reduce+lambda改造
1 lst = [5,4,8,8] 2 res = reduce(lambda x,y:x*10+y,lst) 3 print(res)
<2>"789" -> 数字7 数字8 数字9
1 def func1(x,y): 2 return x*10 + y 3 def func2(n): 4 dic = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} 5 return dic[n] 6 it = map(func2,"789") # [7,8,9] 7 res = reduce(func1,it) 8 print(res,type(res))
(4)sorted
sorted(iterable,key=函数,reverse=False)
功能:排序
参数:
iterable:可迭代型数据(容器类型数据,range对象,迭代器)
key :指定自定义函数或内置函数
reverse :代表升序或者降序 , 默认是升序(从小到大排序) reverse=False
返回值:
排序后的结果
<1>默认是从小到大排序
1 lst = [1,2,3,4,5,-90,-4,-1,100] 2 res = sorted(lst) 3 print(res)
<2>reverse 从大到小排序
1 lst = [1,2,3,4,5,-90,-4,-1,100] 2 res = sorted(lst,reverse=True) 3 print(res)
<3>指定函数进行排序
①按照绝对值排序 abs
1 lst = [-10,-1,3,5] 2 res = sorted(lst,key=abs) 3 print(res)
<4>使用自定义函数进行排序
1 lst = [19,21,38,43,55] 2 def func(n): 3 return n % 10 4 lst = sorted(lst,key=func) 5 print(lst)
<5>sorted 和 sort 之间的区别
①sorted可以排序一切容器类型数据, sort只能排列表
② sorted返回的是新列表,sort是基于原有的列表进行修改
③ 推荐使用sorted
标签:python,res,dic,8.02,lst,func,print,new,lx 来源: https://www.cnblogs.com/Magicianlx/p/13418836.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。