Python sort,sorted 排序时,解决字符串元素包含数字导致的排序错乱的问题

这里只考虑元素是具有规则性的,如:

your_list = ["a1", "a2", "a10", "b2", "b1"]

对于这个列表,如果直接使用python 内置函数 sort,或者 sorted  进行排序(二者的区别就是,前者直接修改原有列表,后者返回一个新列表,原有列表保持不变),得到结果是这样的:

['a1', 'a10', 'a2', 'b1', 'b2']

之所以会造成这种结果,是因为在进行排序时,会对每一个字符串元素相同下标的字符根据 ascII 大小,按照指定规则要求,进行倒序或者顺序进行排序,这就造成了  "a10" 排在了 "a2” 前面,通常情况,这种结果并不是我们想要的,所以我们需要想办法把第一个字符后面的字符比对更换为整型比对即可:

print(sorted(your_list, key=lambda info: (info[0], int(info[1:]))))

这里结合了 lambda 函数进行处理,返回给 key 的是一个元组,第一个元素是第一个字符,仍然进行字符比对,第二个元素是将第二个及其后面的字符转化为了整型的结果,最后输出结果为:

['a1', 'a2', 'a10', 'b1', 'b2']

顺利得到了我想要的结果。

 

如果需要进行更复杂的转换(元素为更复杂的数据格式或者数据结构),可以将 lambda  函数转换为自定义的函数即可,这里以实现当前需求,写个示例:

your_list = ["a1", "a2", "a10", "b2", "b1"]


def func(info):
    return (info[0], int(info[1:]))


print(sorted(your_list, key=func))

输出仍然为:

['a1', 'a2', 'a10', 'b1', 'b2']

 

posted @   lowmanisbusy  阅读(4784)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示