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']
原文地址:https://www.cnblogs.com/lowmanisbusy/p/13019502.html