每天一个小程序—0004题(统计单词出现次数)

第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。

先给出我一开始写得,只能说非常不优美,一个一个字符搞得。。。

 1 f = open('num.txt')
 2 word = []
 3 word_num = {}
 4 char = f.read(1)
 5 while char:
 6     if char == ' ' or char == '
':
 7         if word:
 8             word = ''.join(word).lower()  #转成小写
 9             if word in word_num:
10                 word_num[word] += 1
11             else:
12                 word_num[word] = 1
13             word = []
14     else:
15         word.append(char)
16     char = f.read(1)
17 if word:
18     word = ''.join(word).lower()
19     if word in word_num:
20         word_num[word] += 1
21     else:
22         word_num[word] = 1
23     word = []
24 for i,j in word_num.items():
25     print(i,j)

第二次看了网上的,开始尝试用正则表达式来搞:

 1 import re
 2 
 3 f = open('num.txt')
 4 word_list = []
 5 reg = 'w+'   #/w是匹配字母、数字、下划线
 6 
 7 for line in f:
 8     word = re.findall(reg, line)    #也可以是word = line.split() 
 9     word_list.extend(word)
10 
11 word_set = set(word_list)
12 word_dict = {word: word_list.count(word) for word in word_set}
13 for i, j in word_dict.items():
14     print(i, j)

最后就是python自带的collections模块,里面有Counter计数器函数,可以自动统计单词出现次数。

可以先用个例子来了解一下Counter:

1 from collections import Counter
2 
3 word_list = ['I', 'am', 'zyb', 'zyb']
4 ans = Counter(word_list)
5 print(ans)

结果为:

代码很简洁,如下:

 1 import re
 2 from collections import Counter
 3 
 4 f = open('num.txt')
 5 word_list = []
 6 
 7 for line in f:
 8     word = line.split()
 9     word_list.extend(word)
10 
11 word_dict = dict(Counter(word_list))
12 for i, j in word_dict.items():
13     print(i, j)
原文地址:https://www.cnblogs.com/zyb993963526/p/8280755.html