Python如何对含字符串、整数的元组列表实现正确自定义排序
问题原因
当前排序结果不符合预期的核心原因是:你直接对第一个元素(字符串类型)按字典序排序,而数字形式的字符串的字典序和数值序逻辑不同。例如字符串'15'和'5'比较时,会逐字符对比ASCII码,首字符'1'的ASCII码小于'5',因此'15'会排在'5'前面,和期望的数值排序逻辑冲突。
解决方案
调整排序key的逻辑,对第一个元素做分支处理:
- 可转为整数的数字类字符串:转换为整数后按数值排序,排在非数字字符串之后
- 不可转为整数的符号类字符串:保留原字符串排序,排在最前面
- 第一个元素值相同时,按第二个元素(本身为整数,无需额外转换)排序
实现代码
def get_sort_key(item): s, num1, _ = item try: s_int = int(s) return (1, s_int, num1) except ValueError: return (0, s, num1) array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)] sorted_array = sorted(array, key=get_sort_key) print(sorted_array)
输出结果
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
内容的提问来源于stack exchange,提问作者garbage_collector
相关产品推荐
相关产品推荐

