python基础之内置函数与匿名函数
内置函数68个如下图
重点的关注的内置函数len,sorted,enumerate,all,any,zip,filter,map,reversed,slice
len(o):参数为O,返回数据类型的长度
sorted(): sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:是可迭代类型; cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,默认升序。
返回值:返回一个排序后的列表(字典是按键值排序后的元组组成的列表)
常用在字典排序,按键排序或者按值排序
enumerate(): 枚举,获取可迭代对象的索引值
all():用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,
否则返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
any():判断x对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true
zip():接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表,
reversed():反转
slice():切片
map():接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
filter():接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
内置函数的练习sorted,enumerate,zip,filter,map,reversed,slice
#字典排序 ''' 原理: 1.按健排序 dict_keys 2.按值排序 dict_values 3.按键值中的健或值排序 dict_items ,将键值转为元组存在list,key选择按第一个还是第二个排序。 ''' dic = {'a':2,'b':4,'f':7,'d':6,'e':8} print(dic.keys()) #dict_keys(['a', 'b', 'd', 'e']) print(dic.values()) #dict_values([2, 4, 6, 8]) print(dic.items()) #dict_items([('a', 2), ('b', 4), ('d', 6), ('e', 8)]) li3 = sorted(dic.keys(),) #['a', 'b', 'd', 'e', 'f'] li4 = sorted(dic.values()) #[2, 4, 6, 7, 8] li5 = sorted(dic.items(),key=lambda x:x[0]) #[('a', 2), ('b', 4), ('d', 6), ('e', 8), ('f', 7)] #enumerate:获取可迭代对象中元素的索引值, l = [3,5,6,2,9,'q','w','c'] for index,k in enumerate(l): print('index = %s,k = %s'%(index,k)) ''' 打印: index = 0,k = 3 index = 1,k = 5 index = 2,k = 6 index = 3,k = 2 index = 4,k = 9 index = 5,k = q index = 6,k = w index = 7,k = c ''' #zip将两个或者多个可迭代对象相同的索引值取到一起,返回一个zip object,需要for循环取值 l = [4,3,6,5] l1 = ['q','w','e'] l_li = zip(l,l1) print(l_li) for i in l_li: print(i) ''' i遍历为: (4, 'q') (3, 'w') (6, 'e') ''' #filter # 格式 def func(i): return i%2 ==0 li6 =list(filter(func,range(10))) #[0, 2, 4, 6, 8] 满足留下,不满足舍去 print(li6) # map map(func,iter):iter经func后返回一个对象 def pow2(i): return i*i l =[1,2,3,6,5,7] li7 = list(map(pow2,l)) print(li7) #[1, 4, 9, 36, 25, 49],map(func,L)
匿名函数
函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任意数据类型 add = lambda x,y:x+y print(add(3,4))
习题:
求10-100000内每位加起来等于5的数,如14,23。。。。10023等,
请先思考再看答案,提示:可以先写个分解函数,将拆分的数字家和为5的筛选出来。这是基础的
#第一种常规解法 def split_num(i): strnum = str(i) sum = 0 for i in strnum: i =int(i) sum += i return sum num_list = [] for i in range(10,100000): nums = split_num(i) if nums == 5: num_list.append(i) for i in num_list: print('%5s'%i,end=',') if (num_list.index(i)+1)%10 == 0: print() print(' 总计有%s个'%len(num_list)) #充分利用内置函数 ls = [x for x in range(10,100000) if sum(map(int,str(x)))==5] for k,v in enumerate(ls): print('%5s'%v,end=',') if (k+1) % 10 == 0 : print() print(' 总共有%s个'%len(ls))