第一种是只检索26个字母,第二种是排除特殊符号,但是输出结果显示相同字母的频率不同,是哪里造成的差别?
第三种代码的结果和第一种是一样的,所以第二种代码哪里出现问题了呢?
#第一种代码
alpha = open('hamlet.txt','r').read()
alpha.lower()
lst = []
for i in alpha:
if i in 'abcdefghijklmnopqrstuvwxyz': #主要差别在这
lst.append(i)
dic = {}
for i in lst:
dic[i] = dic.get(i,0) + 1
diclst = list(dic.items())
diclst.sort(key = lambda x:x[1],reverse = True)
for i in range(26):
print(diclst[i])
#前五个结果
('e', 14429)
('t', 10944)
('o', 10395)
('a', 8720)
('s', 7900)
#第二种代码
ch = (open('hamlet.txt','r').read()).lower()
excludes = '|#$%&()*+,-./:;<=>?@[\\]^_{|}!!\'\""\n"……():;’‘“”《》?,。'
dic2={}
for i in ch:
if i not in excludes and i != ' ': #这
dic2[i] = dic2.get(i,0) + 1
diclst2 = list(dic2.items())
diclst2.sort(key = lambda x:x[1],reverse = True)
for i in range(26):
print(diclst2[i])
#前五个结果
('e', 15859)
('t', 12455)
('o', 11453)
('a', 10257)
('i', 8907)
#第三种代码(部分)
for i in txt:
if i == " " or i in ex:
continue
else:
if ord(i)<97:
i=chr(ord(i)+32) #大写字母转小写字母 或改为 txt.lower()
counts[i]=counts.get(i,0)+1