鱼C论坛

 找回密码
 立即注册
查看: 1129|回复: 3

[已解决]python

[复制链接]
发表于 2021-8-15 15:40:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我:
fo = open("命运-网络版.txt", "r", encoding = "utf-8")
fi = open("命运-字符统计.txt", "w", encoding = "utf-8")
text = fo.read()#两个遍历  ***排序
d = {}
ls1 = []
for i in text:
    d[i] = d.get(i,0) + 1
del d['\n']
for key in d:
    ls1.append('{}:{}'.format(key,d[key]))
ls1.sort(key = lambda x:x[2],reverse = True)
ls2 = ls1[:100]
fi.write(','.join(ls2))
fo.close()
fi.close()

参考:
names = ["命运", "寻梦"]
for name in names:
    fi = open(name+"-网络版.txt", "r", encoding="utf-8")
    fo = open(name+"-字符统计.txt", "w", encoding="utf-8")
    txt = fi.read()
    d = {}
    for c in txt:
        d[c] = d.get(c, 0) + 1
    del d['\n']
    ls = list(d.items())
    ls.sort(key=lambda x:x[1], reverse=True)
    for i in range(100):
        ls[i] = "{}:{}".format(ls[i][0], ls[i][1])
    fo.write(",".join(ls[:100]))
    fi.close()
    fo.close()


为什么我写的结果没有排序呢,可是我在调试的时候,确实排序了。答案排序了。
最佳答案
2021-8-15 17:09:29
你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_items,list将其转化为列表,此列表中的每一项都是一个(字符,出现次数)的元组
此时对ls进行排序,key就是元组中的出现次数

而你的做法是现将字典转化成字符串,再进行比较,此时比较的实际上是《字符串的第三位》而不是《字符出现次数》,即如果有两个字符出现次数分别为15,180,则你的sort方法无法正确排序,于是出现了类似未排序的结果,其实你的方法造成的结果是对出现次数的最高位进行了排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-15 17:09:29 | 显示全部楼层    本楼为最佳答案   
你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_items,list将其转化为列表,此列表中的每一项都是一个(字符,出现次数)的元组
此时对ls进行排序,key就是元组中的出现次数

而你的做法是现将字典转化成字符串,再进行比较,此时比较的实际上是《字符串的第三位》而不是《字符出现次数》,即如果有两个字符出现次数分别为15,180,则你的sort方法无法正确排序,于是出现了类似未排序的结果,其实你的方法造成的结果是对出现次数的最高位进行了排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 17:11:04 | 显示全部楼层
Pliosauroidea 发表于 2021-8-15 17:09
你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_it ...

调试的时候发现可以排序可能是你调试时用的输入字符串中的重复次数都不超过10,此时字符串第三位=字符出现次数,于是可以正确排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-15 17:20:23 | 显示全部楼层
感谢,确实没有考虑到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表