蝴蝶不菲
您的列表,以及由它组成的数组。请注意数组中的浮点数:In [124]: lstsArray = [[[54,21,31], [1,2,3], [15,25,35]], ...: [[12,22,32], [3,2,1], [16,26,36]], ...: [[34,24,38], [0.1,1,1], [17,27,37]]] In [125]: val=np.array(lstsArray) In [126]: val Out[126]: array([[[54. , 21. , 31. ], [ 1. , 2. , 3. ], [15. , 25. , 35. ]], [[12. , 22. , 32. ], [ 3. , 2. , 1. ], [16. , 26. , 36. ]], [[34. , 24. , 38. ], [ 0.1, 1. , 1. ], [17. , 27. , 37. ]]])这是一个 (3,3,3) 整形数组。但是您的排序忽略了初始 (3,3) 布局,因此让我们继续重塑它:In [133]: val = np.array(lstsArray).reshape(-1,3) In [134]: val Out[134]: array([[54. , 21. , 31. ], [ 1. , 2. , 3. ], [15. , 25. , 35. ], [12. , 22. , 32. ], [ 3. , 2. , 1. ], [16. , 26. , 36. ], [34. , 24. , 38. ], [ 0.1, 1. , 1. ], [17. , 27. , 37. ]])现在,我们可以轻松地在第一列值上重塑形状。 给出排序顺序:argsortIn [135]: idx = np.argsort(val[:,0]) In [136]: idx Out[136]: array([7, 1, 4, 3, 2, 5, 8, 6, 0])In [137]: val[idx] Out[137]: array([[ 0.1, 1. , 1. ], [ 1. , 2. , 3. ], [ 3. , 2. , 1. ], [12. , 22. , 32. ], [15. , 25. , 35. ], [16. , 26. , 36. ], [17. , 27. , 37. ], [34. , 24. , 38. ], [54. , 21. , 31. ]])并让它回到3d:In [138]: val[idx].reshape(3,3,3) Out[138]: array([[[ 0.1, 1. , 1. ], [ 1. , 2. , 3. ], [ 3. , 2. , 1. ]], [[12. , 22. , 32. ], [15. , 25. , 35. ], [16. , 26. , 36. ]], [[17. , 27. , 37. ], [34. , 24. , 38. ], [54. , 21. , 31. ]]])或在列表显示中:In [139]: val[idx].reshape(3,3,3).tolist() Out[139]: [[[0.1, 1.0, 1.0], [1.0, 2.0, 3.0], [3.0, 2.0, 1.0]], [[12.0, 22.0, 32.0], [15.0, 25.0, 35.0], [16.0, 26.0, 36.0]], [[17.0, 27.0, 37.0], [34.0, 24.0, 38.0], [54.0, 21.0, 31.0]]]但是,如果列表只有一个嵌套级别:In [140]: alist = val.tolist() In [141]: alist Out[141]: [[54.0, 21.0, 31.0], [1.0, 2.0, 3.0], [15.0, 25.0, 35.0], [12.0, 22.0, 32.0], [3.0, 2.0, 1.0], [16.0, 26.0, 36.0], [34.0, 24.0, 38.0], [0.1, 1.0, 1.0], [17.0, 27.0, 37.0]]Python排序工作得很好:In [142]: sorted(alist, key=lambda x:x[0]) # or itemgetter Out[142]: [[0.1, 1.0, 1.0], [1.0, 2.0, 3.0], [3.0, 2.0, 1.0], [12.0, 22.0, 32.0], [15.0, 25.0, 35.0], [16.0, 26.0, 36.0], [17.0, 27.0, 37.0], [34.0, 24.0, 38.0], [54.0, 21.0, 31.0]]您有一个双嵌套列表,但希望排序忽略一个图层,这一事实使列表处理复杂化。这就是重塑有很大帮助的地方。numpy目前,我不会测试这些方法的相对速度。