R.B*_*ahl 3 python sorting list
此查询与之前的排序有些相关
在哪里,需要对以下列表进行排序,
data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]
首先通过内部列表的最后一个成员的值,这样,
[[1, .45, 0], [3, .98, 0],[4, .82, 1], [5, .77, 1], [2, .49, 2], [6, .98, 2]]
然后在子列表中排序,即首先将列表与其最后一个成员排序为'0'
使用中间成员作为键,按降序排序,然后将最后一个成员的子列表排序为'1'
依此类推.
现在,我想要根据外部列表中存在的这些元素的顺序进行排序,而不是首先按最后一个成员的值进行排序.即外部列表是否为List_1
`List_1 = [2, 0, 1]`
Run Code Online (Sandbox Code Playgroud)
排序应该产生
[[2, .49, 2], [6, .98, 2] [1, .45, 0], [3, .98, 0], [4, .82, 1], [5, .77, 1]]
Run Code Online (Sandbox Code Playgroud)
最后,按降序排列基于中间元素的子列表应该产生:
[ [6, .98, 2],[2, .49, 2], [3, .98, 0], [1, .45, 0], [4, .82, 1], [5, .77, 1]]
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何建议?
使用list.index
密钥:
>>> data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1],
[5, .77, 1], [6, .98, 2]]
>>> List_1 = [2, 0, 1]
>>> sorted(data, key=lambda e: (List_1.index(e[2]), -e[1]))
[[6, 0.98, 2], [2, 0.49, 2], [3, 0.98, 0], [1, 0.45, 0],
[4, 0.82, 1], [5, 0.77, 1]]
Run Code Online (Sandbox Code Playgroud)