对一个由数组组成的复杂结构进行排序

5
我正在寻找一种方法对具有复杂结构的数组的数组进行排序:
L=[[
[[1,1,1,1,1,1,1],1,56],
[[6,6,6,6,6,6,6],1,3],
[[3,3,3,3,3,3,3],1,54]],
[[[2,2,2,2,2,2,2],2,42],
[[5,5,5,5,5,5,5],2,6]]]

我希望按照最后一个元素的意义(56、3、54和42、6)进行排序。 我想要得到的是:
L=[[
[[6,6,6,6,6,6,6],1,3],
[[3,3,3,3,3,3,3],1,54],
[[1,1,1,1,1,1,1],1,56]],
[[[5,5,5,5,5,5,5],2,6],
[[2,2,2,2,2,2,2],2,42]]]

我已经尝试过:L.sort(key=lambda x: x[0][0][2]),但它没有起作用...
我看到了那些建议,但我没有成功使其工作: 如何按内部列表的特定索引对列表中的列表进行排序? 任何帮助将不胜感激! 先行致谢!
1个回答

4
您可以使用itemgetter对多个索引进行排序。
在这种情况下,对L[i]的索引12进行排序。
import operator
for i in range(len(L)):
    L[i] = sorted(L[i], key=operator.itemgetter(1, 2))

或者更简单一点:
import operator
    for s in L:
        s.sort(key=operator.itemgetter(1, 2))

感谢 @georg。
输出:
[[[[6, 6, 6, 6, 6, 6, 6], 1, 3],
  [[3, 3, 3, 3, 3, 3, 3], 1, 54],
  [[1, 1, 1, 1, 1, 1, 1], 1, 56]],
 [[[5, 5, 5, 5, 5, 5, 5], 2, 6], 
  [[2, 2, 2, 2, 2, 2, 2], 2, 42]]]

1
你可以简化这个代码:for s in L: s.sort(...)。不需要索引 - 列表是引用! - georg
3
不,s = sorted(s) 不起作用!s.sort() 是至关重要的。 - georg
3
因为 L[i]=... 修改了 L 本身的值,而 s=... 只是给 s 赋予了新值。 - georg
谢谢@georg,我又修改了我的答案! - Aaron
非常感谢!运行得很好! - Pauline1006
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接