You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

按字符串首数字排序字符串列表的实现问题求助

解决按字符串首数字数值排序的问题

嘿,我来帮你搞定这个排序问题!你的核心需求是按每个字符串里第一个数字的数值大小来排序列表,但之前的代码有个关键问题:你提取的是字符串类型的数字,而字符串排序是按字符顺序比较的(比如'16'会因为首字符'1'比'4'小,排在'4'前面),这就导致结果不符合预期。

解决方案

只需要把提取到的第一个数字转换成整数,让排序逻辑基于数值大小而非字符顺序即可。修改后的代码如下:

my_list = ['16. Michlík', '4. and 65. Bichakhchyan', '15. Pavol']
sorted_list = sorted(my_list, key=lambda x: int(x[:x.find(".")]))
print(sorted_list)

代码解释

  • x.find("."):找到字符串中第一个.的位置,比如对于'4. and 65. Bichakhchyan',会返回索引1。
  • x[:x.find(".")]:截取第一个.之前的部分,得到数字字符串(比如'4''15')。
  • int(...):把这个数字字符串转换成整数,这样排序时就会按数值从小到大排列,而不是字符顺序。

运行结果

执行后会输出你期望的结果:

['4. and 65. Bichakhchyan', '15. Pavol', '16. Michlík']

如果你的列表里可能存在开头不是数字的元素,可以再加个异常处理或者正则提取来增强健壮性,但根据你给出的示例数据,上面的代码完全够用啦!

内容的提问来源于stack exchange,提问作者P. May

火山引擎 最新活动