You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 二维数组排序未得到预期正确结果问题求助

问题原因

  • sorted()函数不会修改原输入数组,只会返回新的排序后数组,你代码中没有接收sorted()的返回值,直接打印原数组,首先就无法得到排序结果。
  • 你数组中第二列的元素都是字符串类型,默认排序使用字典序对比规则,而非数值大小规则。比如字符串对比时'939.00000000' < '94.00000000'会判定为真,因为逐字符对比到第二位时'3' < '4'就直接返回结果,不会按照数值939>94的逻辑判断,这是排序结果不符合预期的核心原因。

解决方法

方案1:Python原生实现

修正排序逻辑,将第二列元素转为float类型做数值排序,同时接收sorted()返回值即可:

from operator import itemgetter
import pprint
arr=[['0.55070000', '879.00000000'], ['0.55350000', '879.00000000'], ['0.55640000', '879.00000000'], ['0.56210000', '879.00000000'], ['0.56490000', '879.00000000'], ['0.56780000', '879.00000000'], ['0.57060000', '879.00000000'], ['0.54500000', '899.00000000'], ['0.56370000', '901.00000000'], ['0.53070000', '908.00000000'], ['0.57350000', '916.00000000'], ['0.55000000', '9172.00000000'], ['0.56300000', '939.00000000'], ['0.54490000', '94.00000000'], ['0.56040000', '96.00000000'], ['0.54960000', '999.00000000']]
# 接收sorted返回的排序后数组,key中把第二列转为float做数值对比
sorted_arr = sorted(arr,key=lambda x:float(x[1]))
pprint.pprint(sorted_arr)

如果需要直接修改原数组,可以使用列表自带的sort()方法实现原地排序:

arr.sort(key=lambda x:float(x[1]))
pprint.pprint(arr)

方案2:Numpy实现

你注释中的Numpy方案需要注意将数组转为数值类型再排序,修正后代码如下:

import numpy as np
arr=[['0.55070000', '879.00000000'], ['0.55350000', '879.00000000'], ['0.55640000', '879.00000000'], ['0.56210000', '879.00000000'], ['0.56490000', '879.00000000'], ['0.56780000', '879.00000000'], ['0.57060000', '879.00000000'], ['0.54500000', '899.00000000'], ['0.56370000', '901.00000000'], ['0.53070000', '908.00000000'], ['0.57350000', '916.00000000'], ['0.55000000', '9172.00000000'], ['0.56300000', '939.00000000'], ['0.54490000', '94.00000000'], ['0.56040000', '96.00000000'], ['0.54960000', '999.00000000']]
columnIndex = 1
# 转为float类型的numpy数组再排序
arr2D = np.array(arr, dtype=np.float64)
sortedArr = arr2D[arr2D[:,columnIndex].argsort()]
print('Sorted 2D Numpy Array')
print(sortedArr)

内容的提问来源于stack exchange,提问作者Syed Mokarrom Hossain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:48:02