基于多个标准对多维数组进行排序的算法

时间:2018-06-11 11:33:08

标签: python python-3.x algorithm sorting search

假设我们有一个包含6列的表(所有整数,未排序)。我想根据优先级顺序的3列对此进行排序。有没有算法可以做到这一点?

我这样抬头:

data.sort(key=lambda x: (x[3], x[5], x[4]))

但这是如何运作的?第5列是否会干扰按第3列排序的表/多维数组?或者只有当第3列的属性相同时才会打扰它,所以在它下面对第5列进行排序?

如果某人能够提出现有/新算法来做到这一点,那就太棒了。这有点类似于着名的#34;基于多个标准创建平衡团队的算法"问题。 (如果算法基于Python,则更好)

2 个答案:

答案 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']]
"""

我不确定它为什么起作用,也找不到它的文档。