假设我们有一个包含6列的表(所有整数,未排序)。我想根据优先级顺序的3列对此进行排序。有没有算法可以做到这一点?
我这样抬头:
data.sort(key=lambda x: (x[3], x[5], x[4]))
但这是如何运作的?第5列是否会干扰按第3列排序的表/多维数组?或者只有当第3列的属性相同时才会打扰它,所以在它下面对第5列进行排序?
如果某人能够提出现有/新算法来做到这一点,那就太棒了。这有点类似于着名的#34;基于多个标准创建平衡团队的算法"问题。 (如果算法基于Python,则更好)
答案 0 :(得分:0)
很难理解你想如何排序它。元组按字典顺序排序。这意味着格式元组[A,B,C]上的元组将首先在A上排序,然后在B上排序,最后在C上排序。
例如,这些元组按降序列出:
(20, 0, 0)
(10, 100, 1000)
(10, 0, 2000)
(10, 0, 0)
(0, 5000, 0)
(0, 200, 3000)
(0, 100, 1000)
您描述的顺序听起来像是要在第一个元组元素上排序后选择前n个,然后根据第二个元素求助。这是更先进的,我认为如果你在多次通过中对你的东西进行排序,意图会更加明确。
答案 1 :(得分:0)
您展示的方法有效,并且可以扩展到多列:
my_lst = [['a', 5, 'z'],['a', 5, 'a'], ['b', 9, 'm'], ['a', 2, 'r'], ['b', 7, 'j'] , ['b', 3, 'x']]
my_lst.sort(key = lambda x: [x[i] for i in range(3)])
print(my_lst)
""" Output:
[['a', 2, 'r'], ['a', 5, 'a'], ['a', 5, 'z'], ['b', 3, 'x'], ['b', 7, 'j'], ['b', 9, 'm']]
"""
我不确定它为什么起作用,也找不到它的文档。