Python拼接数组升序排序异常 数字3排末尾求正确代码
问题原因
排序结果不符合预期由两处代码逻辑错误导致:
- 元素类型不匹配:
input().split()切割输入得到的列表元素全部是字符串类型,Python对字符串做排序时默认按字典序逐位比较字符的ASCII值,不会自动识别内容为数字做数值比较。由于字符'1'的ASCII码小于'3',所有以'1'开头的字符串('12'、'13'、'15'、'19')都会被判定为小于'3',最终出现3排在末尾的结果。 - 方法使用错误:Python列表的
sort()方法是原地修改方法,直接在原列表上调整元素顺序,返回值为None,将该方法的执行结果赋值给变量再打印,本身就是错误用法。
正确实现代码
将输入内容转换为整数类型后再做排序即可得到预期的数值升序结果:
# 读取输入后直接将元素转为整数 k1 = list(map(int, input().split())) k2 = list(map(int, input().split())) merged_list = k1 + k2 merged_list.sort() print(merged_list)
如果需要保留元素为字符串格式,仅按数值规则排序,可以用sorted()函数指定排序键,写法如下:
k1 = input().split() k2 = input().split() merged_list = k1 + k2 # 排序时以元素对应的整数值为比较依据 sorted_list = sorted(merged_list, key=int) print(sorted_list)
针对给出的测试输入,两段代码的执行结果都符合升序预期,数字3会排在首位。
内容的提问来源于stack exchange,提问作者GKK
相关产品推荐
相关产品推荐

