【问题标题】:Python 2D Array Sorting is not showing actual resultPython 2D 数组排序未显示实际结果
【发布时间】:2021-11-29 07:52:34
【问题描述】:

我正在尝试对二维数组进行排序,我尝试了很多方法,但它不起作用。我不知道这里发生了什么

    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(floatarry, key=itemgetter(1))
    sorted(arr,key=lambda x:x[1])
    pprint.pprint(arr)
    # from operator import itemgetter
    
    #############################################################
    # columnIndex = 1
    # # Sort 2D numpy array by 2nd Column
    
    # arr2D = np.array(arr)
    
    # sortedArr = arr2D[arr2D[:,columnIndex].argsort()]
    # print('Sorted 2D Numpy Array')
    # print(sortedArr)

result 
[['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']]

最后 4 和 5 没有显示错误结果的行

【问题讨论】:

  • 您正在对仍然是字符串的第二个值进行排序。你必须先把它们变成浮点值/整数值。详情请查看我的回答。

标签: python arrays numpy sorting


【解决方案1】:

您正在使用字符串对数组进行排序。在lambda函数中将它们转换为float,然后尝试-

注意:确保分配排序函数的输出。

arr_sorted = sorted(arr, key=lambda x: float(x[1]))
arr_sorted
[['0.54490000', '94.00000000'],
 ['0.56040000', '96.00000000'],
 ['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.56300000', '939.00000000'],
 ['0.54960000', '999.00000000'],
 ['0.55000000', '9172.00000000']]

如果您希望按降序排序,请在sorted 中添加reverse=True 作为参数。


如果你想在排序后对这个数组进行更多的数值操作,那么我建议先将整个数组转换为浮点值,然后再进行排序或其他操作。 p>

arr2 = [[float(j) for j in i] for i in arr]
arr_sorted = sorted(arr2, key=lambda x: x[1])
arr_sorted
[[0.5449, 94.0],
 [0.5604, 96.0],
 [0.5507, 879.0],
 [0.5535, 879.0],
 [0.5564, 879.0],
 [0.5621, 879.0],
 [0.5649, 879.0],
 [0.5678, 879.0],
 [0.5706, 879.0],
 [0.545, 899.0],
 [0.5637, 901.0],
 [0.5307, 908.0],
 [0.5735, 916.0],
 [0.563, 939.0],
 [0.5496, 999.0],
 [0.55, 9172.0]]

【讨论】:

  • 很高兴随时提供帮助
【解决方案2】:

sorted() 函数不会改变arr 本身,它只是返回一个排序列表,然后您必须将其分配给某个变量。所以这样做:

from operator import itemgetter
import pprint
arr=[['0.55070000', '879.00000000'], ['0.55350000', '879.00000000'], ...]
sorted_arr = sorted(arr,key=lambda x:x[1])
pprint.pprint(sorted_arr)

【讨论】:

  • 它不起作用。结果是一样的
  • 您的列表已经从最小值 (879.00000000) 到最大值 (999.00000000) 进行了很好的排序,难怪您看不到任何差异。如果你想让它从大到小排序,写sorted_arr = sorted(arr,key=lambda x:x[1], reverse=True)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多