一、zip函数
用法:zip(可迭代对象1,可迭代对象2,......) ------->zip(iter1,iter2,......)
若iter1和iter2等前后不对应(比如:不能一一对应),自动过滤错误;返回的结果是迭代格式,需要用list();
用途:zip()相当于拉链操作,其中可以传入:列表、元祖、字符串等
print(zip(('a','b','c'),(1,2,3))) #<zip object at 0x000001AF4F63FE48> print(list(zip(('a','b','c'),(1,2,3)))) #[('a', 1), ('b', 2), ('c', 3)] #自动过滤错误 res1=zip(('a','b','c','d'),(1,2,3)) print(list(res1)) #[('a', 1), ('b', 2), ('c', 3)] res2=zip(('a','b','c'),(1,2,3,4)) print(list(res2)) #[('a', 1), ('b', 2), ('c', 3)] #zip中传入的iter类型可以不一样 res3=zip('hello',(1,2,3,4,5)) print(list(res3)) #[('h', 1), ('e', 2), ('l', 3), ('l', 4), ('o', 5)] #zip中传入多个iter l1=['psy',22,22] l2=['is',1,'efrn'] l3=['a','fcer',6] l4=['beauty',4,7,0,3,5] print(zip(l1,l2,l3,l4)) #<zip object at 0x000001C7932138C8> print(list(zip(l1,l2,l3,l4))) #[('psy', 'is', 'a', 'beauty'), (22, 1, 'fcer', 4), (22, 'efrn', 6, 7)] print(list(zip(l1,l2,l3,l4))[0]) #('psy', 'is', 'a', 'beauty') print('_'.join(list(zip(l1,l2,l3,l4))[0])) #psy_is_a_beauty
二、max和min函数
最大值和最小值函数,很简单,但是将其和字典联系在一起就比较难
#简单 l=[1,3,100,-2] print(max(l)) #100 print(min(l)) #-2 l=[2,3,'a',56] print(max(l)) #报错,不同类型不能进行比较
#较难
age_dict={'age13':40,'age4':18,'age3':100}
print(max(age_dict.values())) #100
print(max(age_dict.keys())) #age4
#将age_dict的键进行ASCII码比较(一个一个的比较,前3位都是age,第4位最大的就是4),所以返回age4
print(list(max(zip(age_dict.values(),age_dict.keys())))) #[100, 'age3'] 此时先比较的是value 因为value写在了前面
print(list(max(zip(age_dict.keys(),age_dict.values())))) #['age4', 18] 此时先比较的是key 因为value写在了前面
print(list(max(age_dict))) #['a', 'g', 'e', '4'] 默认比较的是key值
print(max(age_dict)) #age4
print(max(zip(age_dict.values(),age_dict.keys()))) #(100, 'age3')
print(max(zip(age_dict.keys(),age_dict.values()))) #('age4', 18)
#找出peope中年纪大最大的------>搞懂这个,你就真的懂啦~
people=[{'name':'psy','age':22},{'name':'pyg','age':55},{'name':'pjh','age':80},{'name':'xk','age':50}]
#print(max(people)) #报错,因为字典是无序的,无法进行比较
print(max(people,key=lambda dict:dict['age'])) #{'age': 80, 'name': 'pjh'}
max()函数的注意点:
(1)max处理的是可迭代对象,相当于一个for循环取出每个元素进行比较【不同类型之间不能进行比较】;
(2)每个元素间进行比较,是从每个元素的第一个位置依次比较,如果这一个位置分出了大小,后面的都不需要比较了,直接得出结果。
三、chr和ord相呼应
print(chr(97)) #a print(ord('a')) #97
小提议:以后可以做加密啊~
四、一些数学函数
(1)pow(x,y)表示x^y pow(x,y,z)表示x^y%z
(2)round()四舍五入 round(number,ndigits)
print(round(3.8)) #4 print(round(3.1415926,3)) #3.142
注:这方面太多了,自行百度吧......
五、reversed 反转函数
l=[1,3,2,6,4] print(reversed(l)) #<list_reverseiterator object at 0x0000029DA756E1D0> print(list(reversed(l)))#[4, 6, 2, 3, 1] l='psyqbshxsqkl576' print(list(reversed(l))) #['6', '7', '5', 'l', 'k', 'q', 's', 'x', 'h', 's', 'b', 'q', 'y', 's', 'p']
六、set 集合形式 ---->我不知道是不是要把它划分在函数这一块....反正知道功能就行....
特点:没有重复的+无序
print(set('hello')) #{'o', 'l', 'e', 'h'} 去重+无序
七、sorted 排序函数
用法:sorted(iter,key,reverse)
iter表示可叠代对象;
key表示传入的函数;
reverse表示是否反转,默认是False,正序(从小到大);若为True则反序(从大到小)
没啥要点,就是和不同数据类型联合使用的时候需要注意,看下面的例子~
#简单 l=[3,5,2,9,0,1] print(sorted(l)) #[0, 1, 2, 3, 5, 9] print(sorted(l,reverse=True)) #[9, 5, 3, 2, 1, 0] #不同类型的不能比较 l=[3,1,7,'a'] print(sorted(l)) #报错(不同类型不能比较)
#与字典连用 name_dict={'psy':100,'xk':200,'wdj':300} print(sorted(name_dict)) #['psy', 'wdj', 'xk'] #默认对字典中的key进行排序 print(sorted(name_dict,key=lambda key:name_dict[key])) #['psy', 'xk', 'wdj'] #对字典中的value进行排序 print(sorted(name_dict.keys())) #['psy', 'wdj', 'xk'] 对字典中的key进行排序 print(sorted(name_dict.values())) #[100, 200, 300] 对字典中的value进行排序
#小例题【找出people中年纪进行排序】
people=[{'name':'psy','age':22},{'name':'pyg','age':55},{'name':'pjh','age':80},{'name':'xk','age':50}] print(sorted(people,key=lambda dic:dic['age'])) #结果显示 [{'name': 'psy', 'age': 22}, {'name': 'xk', 'age': 50}, {'name': 'pyg', 'age': 55}, {'name': 'pjh', 'age': 80}]
差不多把我觉得比较重要的内置函数都介绍完了~~~
要是你有别的比较重要的内置函数,欢迎留言或者私信我~
-------------------------------❤-------------------------------分割线----------------------------------❤----------------------
【下面就是一些小题目或者小知识点,不分类了,直接在下面列出】
(1)l=[1,2,3,4,5]
1)使用map()方法,把列表l中的值转化为字符
res1=map(str,l) print(list(res1)) #['1', '2', '3', '4', '5']
2)使用reduce()方法,把列表l中的值相加
from functools import reduce res2=reduce(lambda x,y:x+y,l) #不设置初始值 print(res2) #15 res3=reduce(lambda x,y:x+y,l,10) #设置初始值为10 print(res3) #25
3)使用filter()方法,过滤列表l中大于4的值
res4=filter(lambda x:x<=4,l) print(list(res4)) # [1, 2, 3, 4]
(2)看例子
def fun(x,*y,**z): print(x,y,z) fun(1,2,3,4,name='psy',age=22)
其中x传的是数值,*y传的是元祖,**z传的是字典
(3)易忽略的编码转换
#例:将字符串‘潘锁艳’转换成utf-8编码的字节类型
x='潘锁艳' print(type(x)) #<class 'str'>
方法一:
res_x=x.encode('utf-8') print(type(res_x)) #<class 'bytes'>
方法二:
res_x=bytes(x,'utf-8') print(type(res_x)) #<class 'bytes'>
(4)全局变量和局部变量
globals()获取所有全局变量; locals()获取所有局部变量
下面两个小例子,看懂你就真懂啦~
例1:
namelist=['psy','xk'] def fun1(): namelist=123 fun1() print(namelist) #['psy', 'xk']
例2:
namelist=['psy','xk'] def fun2(): global namelist namelist=123 fun2() print(namelist) #123
(5)小题目:利用递归的思想建立1*2*3*4*5*6*7=5040 阶乘
#方法一:简单,大家都能想到定义一个函数,然后自己调用自己
def f(n): if (n==1)or(n==0): return 1 return n*f(n-1) res=f(7) print(res) #5040
#方法二:较难,其实也不难就是不容易想到,使用内置函数reduce
from functools import reduce res=reduce(lambda x,y:x*y,[x for x in range(1,8)]) print(res) #5040
(6)应用题?!【PS:我从小就不喜欢做应用题......没想到码代码之后,还是遇到应用题......苍天啊!】
题:许轲第一天买了若干个红糖馒头(可能是穷了),当即吃了一半(肯定是饿了),还不过瘾,就多吃了一个,以后每天都吃前天剩下的一半再加一个,到第10天刚好剩下一个,问许轲第一天买了多少红糖馒头?
#方法一:简单,根据题干流程定义函数
def fun(x,day): day=day-1 if day==0: return x x=(1+x)*2 res=fun(x,day) return res result=fun(1,10) print(result) #1534
#方法二:比较难想到....还是和内置函数结合在一起,就是使用一个简单的匿名函数
s=1 func=lambda x:(x+1)*2 for i in range(1,10): s=func(s) print(s) #1534
注:python3中的内置函数有很多,大家感兴趣可以自己再去学习,我就列出我觉得比较重要的几个
PS:内置函数可以大大简化你的代码,让你的代码看起来more简洁~~~赶紧用起来啊!