Python 统计字数的思路详解
问题描述:
用Python实现函数count_words(),该函数输入字符串s和数字n,返回s中n个出现频率最高的单词。返回值是一个元组列表,包含出现次数最高的n个单词及其次数,即[(<单词1>,<次数1>),(<单词2>,<次数2>),...],按出现次数降序排列。
您可以假设所有输入都是小写形式,并且不含标点符号或其他字符(只包含字母和单个空格)。如果出现次数相同,则按字母顺序排列。
例如:
printcount_words("bettyboughtabitofbutterbutthebutterwasbitter",3)
输出:
[('butter',2),('a',1),('betty',1)]
解决问题的思路:
1.将字符串s进行空白符分割得到所有的单词列表split_s,如:['betty','bought','a','bit','of','butter','but','the','butter','was','bitter']
2.建立maplist,将split_s转化为元素为元组的列表形式,如:[('betty',1),('bought',1),('a',1),('bit',1),('of',1),('butter',1),('but',1),('the',1),('butter',1),('was',1),('bitter',1)]
3.合并maplist中元素,元组的第一个索引值相同,则将其第二个索引值相加。
//备注:准备采用defaultdict。得到的数据如下:{'betty':1,'bought':1,'a':1,'bit':1,'of':1,'butter':2,'but':1,'the':1,'was':1,'bitter':1}
4.进行排序,按照key进行字母排序,得到如下:[('a',1),('betty',1),('bit',1),('bitter',1),('bought',1),('but',1),('butter',2),('of',1),('the',1),('was',1)]
5.进行二次排序,按照value进行排序,得到如下:[('butter',2),('a',1),('betty',1),('bit',1),('bitter',1),('bought',1),('but',1),('of',1),('the',1),('was',1)]
6.使用切片取出频率较高的*组数据
总结:在python3上不进行defaultdict进行排序结果也是正确的,python2上不正确。defaultdict本身是没有顺序的,要区分列表,所以必须进行排序。
也可尝试自己写,不借助第三方模块
解决方案1(使用defaultdict):
fromcollectionsimportdefaultdict """Countwords.""" defcount_words(s,n): """Returnthenmostfrequentlyoccuringwordsins.""" split_s=s.split() map_list=[(k,1)forkinsplit_s] output=defaultdict(int) fordinmap_list: output[d[0]]+=d[1] output1=dict(output) top_n=sorted(output1.items(),key=lambdapair:pair[0],reverse=False) top_n=sorted(top_n,key=lambdapair:pair[1],reverse=True) returntop_n[:n] deftest_run(): """Testcount_words()withsomeinputs.""" print(count_words("catbatmatcatbatcat",3)) print(count_words("bettyboughtabitofbutterbutthebutterwasbitter",4)) if__name__=='__main__': test_run()
解决方案2(使用Counter)
fromcollectionsimportCounter """Countwords.""" defcount_words(s,n): """Returnthenmostfrequentlyoccuringwordsins.""" split_s=s.split() split_s=Counter(namefornameinsplit_s) print(split_s) top_n=sorted(split_s.items(),key=lambdapair:pair[0],reverse=False) print(top_n) top_n=sorted(top_n,key=lambdapair:pair[1],reverse=True) print(top_n) returntop_n[:n] deftest_run(): """Testcount_words()withsomeinputs.""" print(count_words("catbatmatcatbatcat",3)) print(count_words("bettyboughtabitofbutterbutthebutterwasbitter",4)) if__name__=='__main__': test_run()
总结
以上所述是小编给大家介绍的Python统计字数的思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。