Numpy sort排序表现异常:追加用户输入后数值排序结果不符合预期
问题原因
你遇到的排序异常是类型不匹配导致的字符串排序:
input()函数默认返回字符串类型,将字符串追加到原本是整数类型的numpy数组时,numpy会自动将整个数组的dtype转换为字符串类型- 字符串排序是逐位对比字符的ASCII码值,不是按数值大小计算:例如字符串
'654'的首字符'6'ASCII码大于'4',所以会排在'4200'的后面,而'6'的ASCII码小于'9',所以排在'900'前面,完全不符合数值排序的预期。
解决方法
只需要将用户输入的内容转换为数值类型再追加即可,修正后代码如下:
import numpy as np data = np.array([1000, 2500, 1400, 1800, 900, 4200, 2200, 1900, 3500]) # 将输入转为整数类型 new_data = int(input()) data = np.append(data, new_data) data = np.sort(data) print(data)
如果需要支持小数输入,把int(input())改成float(input())即可。
内容的提问来源于stack exchange,提问作者Nazar Kuche
相关产品推荐
相关产品推荐

