匿名函数:一句话函数,用于内置函数,匿名函数结合内置函数使用python
func = lambda x,y : x+y 名字func :前形参 :后返回值函数
示例1:code
func = lambda x : (x[0],x[2]) 返回多个元素加()对象
示例2:排序
func = lambda x,y :x if x > y else yip
func = lambda *args : max(args) #返回最大的值,也能够添加三元运算>utf-8
内置函数:***加key的 min,max,sorted,map,reduce,filter字符串
加key的格式:it
将最小的值返回io
dic = {'a':3,'b':2,'c':1}
print(min(dic.values(),key=lambda x:x)) key=lambda 函数名 :前形参 :后返回值
检查一个对象是否能够调用
def haiyang(): pass haiyang() print(callable(haiyang))
返回数字的绝对值
l = -8 print(abs(l))
数字相加求和
print(sum([1,2,3,4,5])) #sum函数内,存放的是可迭代函数 print(sum([1,2,3,4,5],10))
min求最小值
max求最大值
# 将成绩最低的从属于的那个列表返回。 # 将成绩最低的分数返回。 dic = {'a':['李业',67],'b':['怼哥', 95],'c':['方垚', 55]} print(dic[min(dic,key=lambda x:dic[x][1])]) #min取出来的key为c,经过字典c key键找到列表 print(dic[min(dic,key=lambda x:dic[x][1])][1]) #找到列表在经过[1]找到55
将一个可迭代对象进行翻转,返回的是一个迭代器
l = reversed('胡海洋') print(list(l)) #翻转获取到的是一个生成器,须要经过list进行打印 l1 = reversed([1,2,3,4,5,6]) print(list(l1)) #翻转列表
将字符串转换成bytes类型
l = "胡海洋" l1 = l.encode('utf-8') #encode转换成bytes字节 print(l1) l2 = bytes(l,encoding='utf-8') print(l2)
将可迭代对象做为参数,将对象中对应的元素,打包成一个个元祖,若是变量的元素不一直,按最短的取
l1 = [1,2,3,4] l2 = ['a','b','c','d','e'] for i in zip(l1,l2): # print(i)
排序函数
语法:sorted(iterable,key=None,reverse=False)
iterable 可迭代对象
key 排序规则,sorted内部会将可迭代对象中每个元素,传递给函数形参,进行排序
reverse True 倒序 Flase正序
列表排序:
l = [1,3,4,7,8,2] l1 = sorted(l) #默认正序 print(l1) l2= sorted(l,reverse=True) #为True倒序 print(l2)
字典排序:
dic = {1:'a',3:'c',2:'b'} dic1 = sorted(dic) # dic1键值排序为1,2,3 dic2 = {} for i in dic1: #建立新的字典,for循环排序好key,添加到新字典 dic2[i] = dic[i] print(dic2)
结合函数使用:
# 按照列表内的字符串长度排序 l1 = ['天龙八部','西游记','红楼梦','三国演义'] print(sorted(l1,key=lambda x:len(x)))
#根据年龄进行排序 l1 = [{'id':1,'name':'胡海洋','age':18}, {'id':2,'name':'俊丽','age':17}, {'id':3,'name':'宝宝','age':1},] print(sorted(l1,key=lambda x:x['age'])) #x['age] 先找到年龄key在进行排序
筛选过滤
语法:filter(function,iterable)
iterable 可迭代对象
function 用来筛选函数,在filter中会自动把迭代对象中的元素传递给function,以后根据function返回 True或者Flase来判断是否保留此项数据
字典筛选年龄大于十六的
l1 = [{'id':1,'name':'alex','age':18}, {'id':1,'name':'wusir','age':17}, {'id':1,'name':'taibai','age':16},] l2 = filter(lambda x:x['age'] > 16,l1) print(list(l2)) #变成迭代器一一进行判断,lamdba函数,x形参,x['age]返回值判断,l1可迭代对象
映射函数
语法:map(function,iterable)
能够对可迭代对象中的每个元素进行映射,分别取值执行function
计算列表中每一个元素的平方,返回新列表
lst = [1,2,3,4,5] # def func(s): # return s*s # # mp = map(func,lst) # print(mp) # print(list(mp)) # 改写成lamdba print(list(map(lambda x:x*x,lst)))
计算两个列表中相同位置的数据的和
lst1 = [1, 2, 3, 4, 5] lst2 = [2, 4, 6, 8, 10] print(list(map(lambda x,y:x+y,lst1,lst2))) #传入多个值进行计算
使用方法:
reduce(函数名,可迭代对象)
做用:
先把列表中的前两个元素取出来,计算出结果进行保存,当进行到第二个元素传参时,将第一次计算完的 结果与10相乘计算,求出一个新的值将最开始临时保存的值替换掉,依次类推
from functools import reduce def func(x,y): return x * 10 + y # 第一次的时候 x是1 y是2 x乘以10就是10,而后加上y也就是2最终结果是12而后临时存储起来了 # 第二次的时候x是临时存储的值12 x乘以10就是 120 而后加上y也就是3最终结果是123临时存储起来了 # 第三次的时候x是临时存储的值123 x乘以10就是 1230 而后加上y也就是4最终结果是1234而后返回了 l = reduce(func,[1,2,3,4]) print(l) #lamdba方法: from functools import reduce l = reduce(lambda x,y:x * 10 + y,[1,2,3,4]) print(l)