当前位置: 首页 > 后端技术 > Python

高效的Python编程技巧

时间:2023-03-25 23:39:38 Python

工作中经常要处理各种数据。项目赶时间的时候自己写函数很容易浪费时间。Python中有许多内置函数可帮助您提高工作效率!一:根据列表和字典中的条件过滤数据1.假设有一个数字数据列表,过滤列表中的负数listderivationresult=[iforiindataifi>=0]filterresult=filter(lambdax:x>=0,data)2.学生的数学成绩以字典形式存储,筛选成绩大于80的学生d={x:randint(50,100)forxinrange(1,21)}{k:vfork,vind.items()ifv>80}2:使用zip()函数翻转字典的键值对使用zip()函数将可迭代对象作为参数并将对象Pack中的相应元素转换为元组并返回这些元组的列表。>>>s1={x:randint(1,4)forxinsample('abfcdrg',randint(1,5))}>>>s1{'b':1,'f':4,'g':3,'r':1}>>>d={k:vfork,vinzip(s1.values(),s1.keys())}>>>d{1:'r',4:'f',3:'g'}2.统计序列中元素出现的频率1.在一个随机序列中,找出出现频率最高的3个元素,它们出现了多少次?随机序列如下:data=[randint(0,20)for_inrange(20)]方法一:可以用字典来统计,以列表中的数据为key,出现的次数为thevaluefromrandomimportrandintdefdemo():data=[randint(0,20)for_inrange(30)]#数字在列表中出现的次数d=dict.fromkeys(data,0)forvinli:d[v]+=1returndMethod2:直接使用collections模块下的Counter对象>>>data=[randint(0,20)for_inrange(30)]>>>data[7,8,5,16,10,16,8,17,11,18,11,17,15,7,2,19,5,16,17,17,12,19,9,10,0,20,11,2,11,10]>>>c2=Counter(数据)>>>c2Counter({17:4,11:4,16:3,10:3,7:2,8:2,5:2,2:2,19:2,18:1,15:1,12:1,9:1,0:1,20:1})>>>c2[14]4>>>c2.most_common(3)#统计频率出现频率最高的3个数字[(17,4),(11,4),(16,3)]2.统计一篇英文文章中的单词,通过上面的练习,我们知道可以用Counter来解决importrefromcollectionsimportCounter#统计某篇文章中英文单词的词频withopen('test.txt','r',encoding='utf-8')asf:d=f.read()total=re.split('\W+',d)#所有单词列表result=Counter(total)print(result.most_common(10))3.根据大小字典中的值,例如班级学生的数学成绩以字典的形式存储:{"Lnad":88,"Jim",71...}请按数学成绩从高到高排序底部!方法一:用zip把字典转成元组,然后用sorted排序>>>data={x:randint(60,100)forxin"xyzfafs"}>>>data{'x':73,'y':69,'z':76,'f':61,'a':64,'s':100}>>>sorted(data)['a','f','s','x','y','z']>>>data=sorted(zip(data.values(),data.keys()))>>>data[(61,'f'),(64,'a'),(69,'y'),(73,'x'),(76,'z'),(100,'s')]方法二:使用sorted函数的key参数>>>data.items()>>>dict_items([('x',64),('y',74),('z',66),('f',62),('a',80),('s',72)])>>>已排序(data.items(),key=lambdax:x[1])[('f',62),('x',64),('z',66),('s',72),('y',74),('a',80)]四。在多个词典中查找共同点关键实际场景:在足球联赛中,统计每一轮进球的球员。第一轮:{“C罗”:1,“苏亚雷斯”:2,“托雷斯”:1..}第二轮:{“内马尔”:1,“梅西”:2,“姆巴佩”:3..}第三轮:{"Mbappe":2,"C罗":2,"Neymar":1..}模拟随机得分球员和进球数>>>s1={x:randint(1,4)forxinsample('abfcdrg',randint(1,5))}>>>s1{'d':3,'g':2}>>>s2={x:randint(1,4)forxin样本('abfcdrg',randint(1,5))}>>>s2{'b':4,'g':1,'f':1,'r':4,'d':3}>>>s3={x:randint(1,4)forxinsample('abfcdrg',randint(1,5))}>>>s3{'b':4,'r':4,'a':2,'g':3,'c':4}先得到字典的key,然后取每轮游戏key的交集。由于游戏轮数不确定,所以用map批量操作map(dict.keys,[s1,s2,s3])然后累加取交。使用reduce函数reduce(lambdax,y:x&y,map(dict.keys,[s1,s2,s3]))一行代码搞定!更多内容请关注我公众号,Python编程与实战