当前位置: 首页 > 科技观察

我写的Python代码,同事说

时间:2023-03-20 19:35:10 科技观察

人生太短,所以我用Python。程序员的追求不是写代码,而是早日实现财务自由。不对,一不小心说了实话,应该是把代码写的简洁大方吧。Python程序员追求的是Pythonic。只是在Python这门语言中,“隐藏”了如此多的方法,可以让代码简洁、优雅、别具一格。这里我总结了一些常用的操作,尤其是列表和字典的操作,分享给大家。首字母大写的方法有点意思,无意中发现的。>>>s="programmingisawesome">>>print(s.title())ProgrammingIsAwesomelistmerge第一种方式:使用+。>>>a+b[1,2,3,4,5,6]第二种方式:使用extend关键字。>>>a.extend(b)>>>a[1,2,3,4,5,6]后两种方式显然更加优雅,值得推荐。需要注意的一点是,如果列表很大,+会比较慢,最好用extend。列表元素去重使用set()去重列表元素。>>>a=[1,2,3,4,2,3]>>>list(set(a))[1,2,3,4]使用sort()或内置函数对列表进行排序sorted()对列表进行排序。它们之间有两个区别:sort()方法是对原始列表进行操作,而sorted()方法返回的是一个新的列表,而不是对原始列表进行操作。sort()是应用于列表的方法,sorted()可以对所有可迭代对象进行排序。#sort()>>>a=[1,2,3,4,2,3]>>>a.sort()>>>a[1,2,2,3,3,4]>>>>>>a=[1,2,3,4,2,3]>>>a.sort(reverse=True)>>>a[4,3,3,2,2,1]#sorted()>>>a=[1,2,3,4,2,3]>>>sorted(a)[1,2,2,3,3,4]>>>a=[1,2,3,4,2,3]>>>排序(a,reverse=True)[4,3,3,2,2,1]遍历列表的索引和元素对使用enumerate()函数同时输出索引和元素值。>>>a=['python','go','java']>>>fori,vinenumerate(a):...print(i,v)#output0python1go2java查找出现次数最多的列表频繁出现的元素使用max()函数可以快速找到列表中频率最高的元素。>>>a=[1,2,3,4,3,4,5,4,4,2]>>>b=max(set(a),key=a.count)>>>b4需要需要说明的是,当列表中有两个元素出现次数相同时,返回第一个出现的元素。>>>a=[1,2]>>>b=max(set(a),key=a.count)>>>b1统计列表中所有元素出现的次数前面的代码给出了最频繁的发生值。如果你想知道列表中所有元素出现的次数,你可以使用集合模块。collections是Python中的一个模块,提供了很多功能。Counter方法可以完美解决这个需求。>>>fromcollectionsimportCounter>>>>>>a=[1,2,3,4,3,4,5,4,4,2]>>>Counter(a)Counter({4:4,2:2,3:2,1:1,5:1})将两个列表合并到一个字典中使用zip()函数,您可以将两个列表合并到一个字典中。>>>a=['one','tow','three']>>>b=[1,2,3]>>>dict(zip(a,b)){'one':1,'tow':2,'three':3}求两个列表的交集、并集和差集。#list_operate.pydefmain():list_a=[1,2,3,4,5]list_b=[4,5,6,7,8]#两种求交集的方法res_a=[iforiinlist_aifiinlist_b]res_b=list(set(list_a).intersection(set(list_b)))print(f"res_ais:{res_a}")print(f"res_bis:{res_b}")#求并集res_c=list(set(list_a).union(set(list_b)))print(f"res_cis:{res_c}")#两种求差集的方法,在B中不在A中res_d=[iforiinlist_b如果我不在list_a]res_e=list(set(list_b).difference(set(list_a)))print(f"res_dis:{res_d}")print(f"res_eis:{res_e}")if__name__=='__main__':main()字典创建#1.创建一个空字典a={}b=dict()#2.有一个初始值。从输入方便来说,我更喜欢第二种a={'a':1,'b':2,'c':3}b=dict(a=1,b=2,c=3)#3。key来自一个list,value相同,使用fromkeys,相当优雅keys=['a','b','c']value=100d=dict.fromkeys(keys,value)#4,key来自一个list,value也是一个list,使用zipkeys=['a','b','c']values=[1,2,3]d=dict(zip(keys,values))dictionarymergem={'a':1}n={'b':2,'c':3}#合并,两种方式#1.使用updatem.update(n)#2.用**{**m,**n}判断一个key是否存在。Python2判断一个key是否存在,可以使用has_key,但是Python3已经去掉了这个方法。另一种方法是使用in关键字,不仅兼容Python2和Python3,而且速度更快。强烈推荐。d={'a':1,'b':2}if'a'ind:print('hello')获取字典中的值d={'a':1,'b':2}#11.使用key直接获取value,但是这种方法不好。如果key不存在,会报错。推荐使用geta=d['a']#2.使用get。如果key不存在,也可以赋默认值a=d。get('a')c=d.get('c',3)字典遍历d={'a':1,'b':2,'c':3}#遍历keyforkeyind.keys():pass#traversevalueforvalueind.values():pass#traversekeyandvalueforkey,valueind.items():passdictionarycomprehension列表推导和字典推导是我最喜欢的功能,简洁高效。我几乎不能再使用地图和过滤器了。l=[1,2,3]{n:n*nforninl}{1:1,2:4,3:9}字典按键或值排序d={'a':1,'b':2,'e':9,'c':5,'d':7}#按键排序sorted(d.items(),key=lambdat:t[0])#按键排序reversed(d.items(),key=lambdat:t[0],reverse=True)#按值排序sorted(d.items(),key=lambdat:t[1])还有一个要求是我在开发过程中经常遇到的是有一个列表,其元素是字典,然后根据字典的值对列表进行排序。l=[{'name':'a','count':4},{'name':'b','count':1},{'name':'d','count':2},{'name':'c','count':6}]sorted(l,key=lambdae:e.__getitem__('count'))#倒序sorted(l,key=lambdae:e.__getitem__('计数'),reverse=True)