使用Python 统计高频字数的方法
问题
(来自Udacity机器学习工程师纳米学位预览课程)
用Python实现函数count_words(),该函数输入字符串s和数字n,返回s中n个出现频率最高的单词。返回值是一个元组列表,包含出现次数最高的n个单词及其次数,即[(<单词1>,<次数1>),(<单词2>,<次数2>),...],按出现次数降序排列。
可以假设所有输入都是小写形式,并且不含标点符号或其他字符(只包含字母和单个空格)。如果出现次数相同,则按字母顺序排列。
例如:
printcount_words("bettyboughtabitofbutterbutthebutterwasbitter",3)
输出
[('butter',2),('a',1),('betty',1)]
解法
"""Countwords."""
defcount_words(s,n):
"""Returnthenmostfrequentlyoccuringwordsins."""
w={}
sp=s.split()
#TODO:Countthenumberofoccurencesofeachwordins
foriinsp:
ifinotinw:
w[i]=1
else:
w[i]+=1
#TODO:Sorttheoccurencesindescendingorder(alphabeticallyincaseofties)
top=sorted(w.items(),key=lambdaitem:(-item[1],item[0]))
top_n=top[:n]
#TODO:Returnthetopnmostfrequentwords.
returntop_n
deftest_run():
"""Testcount_words()withsomeinputs."""
printcount_words("catbatmatcatbatcat",3)
printcount_words("bettyboughtabitofbutterbutthebutterwasbitter",3)
if__name__=='__main__':
test_run()
小结
主要两个小技巧:
用split()将输入字符串按空格分开;
用sorted()函数对字典先按值,再按键进行排序,尤其是item:(-item[1],item[0]))代表先对item的第二个元素降序排列(item之前用了-),然后对第一个元素升序排列。多个元素的元组亦然。
以上这篇使用Python统计高频字数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。