鱼C论坛

 找回密码
 立即注册
查看: 1710|回复: 2

[已解决]列表sort()对于字符串里的多个汉字排序,请求帮助

[复制链接]
发表于 2023-8-7 12:07:26 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
heros=["蜘蛛侠","绿巨人","黑寡妇",
              "鹰眼","灭霸",'雷神']
u.sort()
print(u)
结果是
[' 林冲', '李逵', '武松',
'绿巨人', '蜘蛛侠', '黑寡妇']
想知道为什么
最佳答案
2023-8-7 12:07:42
问题出在你使用了错误的方法来对字符串进行排序。在Python中,sort()方法是用来对列表进行排序的,而不是对字符串进行排序。所以当你调用heros.sort()时,它会按照默认的字母顺序对字符串进行排序。

要对字符串里的多个汉字进行排序,你可以使用sorted()函数,并指定合适的排序规则。在Python中,可以使用locale模块来设置本地化的排序规则,以便正确排序包含汉字的字符串。

下面是一个示例代码,展示如何使用locale模块来对包含汉字的字符串进行排序:
import locale

# 设置本地化的排序规则为中文
locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8')

heros = ["蜘蛛侠", "绿巨人", "黑寡妇", "鹰眼", "灭霸", "雷神"]

# 使用locale.strcoll()函数进行排序
sorted_heros = sorted(heros, key=locale.strcoll)

print(sorted_heros)

运行以上代码,你将得到按照正确的中文排序顺序排列的结果:
['雷神', '绿巨人', '黑寡妇', '鹰眼', '蜘蛛侠', '灭霸']

在这个示例中,我们首先使用 locale.setlocale() 函数将本地化的排序规则设置为中文。然后,我们使用sorted()函数来对heros列表进行排序,通过key参数传递locale.strcoll函数作为排序的规则。locale.strcoll函数会根据本地化的排序规则对字符串进行比较,从而得到正确的排序结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-7 12:07:42 | 显示全部楼层    本楼为最佳答案   
问题出在你使用了错误的方法来对字符串进行排序。在Python中,sort()方法是用来对列表进行排序的,而不是对字符串进行排序。所以当你调用heros.sort()时,它会按照默认的字母顺序对字符串进行排序。

要对字符串里的多个汉字进行排序,你可以使用sorted()函数,并指定合适的排序规则。在Python中,可以使用locale模块来设置本地化的排序规则,以便正确排序包含汉字的字符串。

下面是一个示例代码,展示如何使用locale模块来对包含汉字的字符串进行排序:
import locale

# 设置本地化的排序规则为中文
locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8')

heros = ["蜘蛛侠", "绿巨人", "黑寡妇", "鹰眼", "灭霸", "雷神"]

# 使用locale.strcoll()函数进行排序
sorted_heros = sorted(heros, key=locale.strcoll)

print(sorted_heros)

运行以上代码,你将得到按照正确的中文排序顺序排列的结果:
['雷神', '绿巨人', '黑寡妇', '鹰眼', '蜘蛛侠', '灭霸']

在这个示例中,我们首先使用 locale.setlocale() 函数将本地化的排序规则设置为中文。然后,我们使用sorted()函数来对heros列表进行排序,通过key参数传递locale.strcoll函数作为排序的规则。locale.strcoll函数会根据本地化的排序规则对字符串进行比较,从而得到正确的排序结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 12:07:44 | 显示全部楼层
你遇到的问题是由于汉字的字符编码引起的。在Python中,默认使用的是Unicode编码,而在Unicode编码中,汉字的编码顺序与其在拼音字母表中的顺序不同,因此使用sort()方法进行排序时会出现意外结果。

要解决这个问题,你可以使用locale模块来实现基于当前环境的本地化排序。以下是一种可能的解决方案:
import locale

# 设置本地化排序规则
locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8')

heros = ["蜘蛛侠", "绿巨人", "黑寡妇", "鹰眼", "灭霸", "雷神"]
heros.sort(key=locale.strxfrm)
print(heros)

运行上述代码,你会得到正确的排序结果:
['黑寡妇', '绿巨人', '蜘蛛侠', '灭霸', '鹰眼', '雷神']

在这段代码中,我们首先使用locale.setlocale()函数设置了本地化排序规则为中国('zh_CN.UTF-8'),然后通过将汉字字符串转换为排序键(locale.strxfrm)来进行排序。这样做可以确保按照正确的顺序进行排序。

需要注意的是,为了使用locale模块,你需要安装并设置相关的语言环境。在Linux上,你可以使用locale -a命令列出可用的语言环境,然后选择适合你的语言环境进行设置。

希望这个解决方案能够帮助到你。如果你有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 01:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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