内置函数 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('\n 总计有 %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('\n 总共有 %s 个'%len(ls))
- View Code
来源: http://www.bubuko.com/infodetail-2862611.html