学不止步 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日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证