Python 高效编程技巧分享
一、根据条件在序列中筛选数据
- 假设有一个数字列表data,过滤列表中的负数
data=[1,2,3,4,-5] #使用列表推导式 result=[iforiindataifi>=0] #使用fliter过滤函数 result=filter(lambdax:x>=0,data)
- 学生的数学分数以字典形式存储,筛选其中分数大于80分的同学
fromrandomimportrandint d={x:randint(50,100)forxinrange(1,21)} r={k:vfork,vind.items()ifv>80}
二、对字典的键值对进行翻转
- 使用zip()函数
zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
fromrandomimportrandint,sample s1={x:randint(1,4)forxinsample("abfcdrg",randint(1,5))} d={k:vfork,vinzip(s1.values(),s1.keys())}
三、统计序列中元素出现的频度
- 某随机序列中,找到出现次数最高的3个元素,它们出现的次数是多少
方法1:
#可以使用字典来统计,以列表中的数据为键,以出现的次数为值 fromrandomimportrandint #构造随机序列 data=[randint(0,20)for_inrange(30)] #列表中出现数字出现的次数 d=dict.fromkeys(data,0) forvind: d[v]+=1
方法2:
#直接使用collections模块下面的Counter对象 fromcollectionsimportCounter fromrandomimportrandint data=[randint(0,20)for_inrange(30)] c2=Counter(data) #查询元素出现次数 c2[14] #统计频度出现最高的3个数 c2.most_common(3)
- 对某英文文章单词进行统计,找到出现次数最高的单词以及出现的次数
importre fromcollectionsimportCounter #统计某个文章中英文单词的词频 withopen("test.txt","r",encoding="utf-8")asf: d=f.read() #所有的单词列表 total=re.split("\W+",d) result=Counter(total) print(result.most_common(10))
四、根据字典中值的大小,对字典中的项进行排序
- 比如班级中学生的数学成绩以字典的形式存储,请按数学成绩从高到底进行排序
方法1:
#利用zip将字典转化为元组,再用sorted进行排序 fromrandomimportrandint data={x:randint(60,100)forxin"xyzfafs"} sorted(data) data=sorted(zip(data.values(),data.keys()))
方法2:
#利用sorted函数的key参数 fromrandomimportrandint data={x:randint(60,100)forxin"xyzfafs"} data.items() sorted(data.items(),key=lambdax:x[1])
五、在多个字典中找到公共键
- 实际场景:在足球联赛中,统计每轮比赛都有进球的球员
第一轮:{"C罗":1,"苏亚雷斯":2,"托雷斯":1..}
第二轮:{"内马尔":1,"梅西":2,"姆巴佩":3..}
第三轮:{"姆巴佩":2,"C罗":2,"内马尔":1..}
fromrandomimportrandint,sample fromfunctoolsimportreduce #模拟随机的进球球员和进球数 s1={x:randint(1,4)forxinsample("abfcdrg",randint(1,5))} s2={x:randint(1,4)forxinsample("abfcdrg",randint(1,5))} s3={x:randint(1,4)forxinsample("abfcdrg",randint(1,5))} #首先获取字典的keys,然后取每轮比赛key的交集。由于比赛轮次数是不定的,所以使用map来批量操作 #map(dict.keys,[s1,s2,s3]) #然后一直累积取其交集,使用reduce函数 reduce(lambdax,y:x&y,map(dict.keys,[s1,s2,s3]))
以上就是Python高效编程技巧分享的详细内容,更多关于Python高效编程技巧的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。