字符串列表排序异常:负整数排序不符合预期
解决负整数的排序问题
你遇到的问题是因为默认的sorted()函数是按字符串的字典序排序,而不是按数字的实际数值大小排序。当处理带负号的字符串时,'-3'的字典序会比'-2'大(因为字符'3'的Unicode码点比'2'高),所以才会出现'-3'排在'-2'前面的错误结果。
解决方案:自定义排序键
我们可以通过sorted()的key参数,提取每个元素中的数字部分并转换为整数,让排序基于数字的实际数值进行:
original_list = ['0 *** *', '1 * *', '2 * *', '3 ***', '-1 *', '-2 *', '-3 **'] # 自定义key:分割每个元素,取第一个部分转成整数 sorted_list = sorted(original_list, key=lambda x: int(x.split('\t')[0]), reverse=True) print(sorted_list)
输出结果
运行这段代码后,会得到你期望的排序:
['3 ***', '2 * *', '1 * *', '0 *** *', '-1 *', '-2 *', '-3 **']
代码解释
x.split('\t')[0]:把每个字符串按制表符\t分割,取出前面的数字部分(比如'-3 **'分割后得到['-3', ' **'],取第一个元素'-3')。int(...):将提取到的数字字符串转换成整数,这样排序时就会按照整数的数值大小比较。reverse=True:保持降序排列的需求,从大到小排序数字。
这样就能正确识别负整数的数值大小,得到你想要的排序结果啦。
内容的提问来源于stack exchange,提问作者Nauman Shahid
相关产品推荐
相关产品推荐

