学不止步 2022-05-14 15:48 采纳率: 75%
浏览 16
已结题

统计英文文本的字符频率,对同一文本,两种代码的结果不同,为何?(语言-python)

第一种是只检索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
  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-05-14 16:06
    关注

    很遗憾,第一和第三都是错的。。。因为 alpha.lower()返回一个新的字符串,但是没有变量接收,所以alpha本身没有改变,还是存在大写字母。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等