致读者:本人是一名通信专业学生,仅学了4天Python ,难免有些地方写的很笨拙。
写博客一方面是为了记录自己的学习过程中遇到的问题和思考,一方面是希望能够帮助到很多和自己一样处于困惑的读者。
水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
越努力,越幸运
请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。
所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。
输入格式:
输出格式:
输入样例:
输入格式:
输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。
输出格式:
在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。
输入样例:
This is a test.
The word "this" is the word with the highest frequency.
Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee. But this_8 is different than this, and this, and this...#
this line should be ignored.
输出样例:
输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)
23
5:this
4:is
解法1
import re
import sys
from collections import Counter
s = sys.stdin.read()
s = str(re.sub(r'[^0-9a-zA-Z_]', ' ', s[:s.find("#")]))
new_l = list(map(str, s.replace('.', ' ').lower().split()))
for i in range(len(new_l)):
if len(new_l[i]) > 15:
new_l[i] = new_l[i][0:15]
new_l = sorted(new_l)`
print(len(set(new_l)))
d = list(Counter(new_l).most_common(len(set(new_l))))
for i in range(len(set(new_l)) // 10):
print(f'{d[i][1]}:{d[i][0]}')