7-Python3 其他内置函数以及易忽略的小知识

一、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简洁~~~赶紧用起来啊!

转载于:https://my.oschina.net/pansy0425/blog/2988814

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值