Python - 使用每列对2D数组进行排序

时间:2017-07-01 23:25:03

标签: python arrays sorting

我想以下列方式对包含三列的2D数组进行排序:

  • 首先,数组遍历其中一列,并根据值对每个数字进行排序。
  • 然后,如果有任何“关系”,程序会使用另一列来整理关系。
  • 最后,它使用剩余的列来整理仍然存在的任何关系。

示例:

[[6, 0, "Hello"],
 [4, 1, "Jane"],
 [3, 0, "Text"],
 [4, 1, "Bob"]]

按重要性排列的列是:1,0,2。这意味着我们检查第二列,然后是第一列,最后是最后一列。

[[6, 0, "Hello"],
 [3, 0, "Text"],
 [4, 1, "Jane"],
 [4, 1, "Bob"]]

现在,我们使用第一列:

[[3, 0, "Text"],
 [6, 0, "Hello"],
 [4, 1, "Jane"],
 [4, 1, "Bob"]]

最后,我们使用最后一栏:

[[3, 0, "Text"],
 [6, 0, "Hello"],
 [4, 1, "Bob"],
 [4, 1, "Jane"]]

基于一列对其进行排序并忽略任何重复并不难。这显示在这里:Sorting a 2D array using the second column C++。我尝试了data.sort(key=itemgetter(1)),但它只适用于一列。

我不知道如何继续这个。请帮忙!

1 个答案:

答案 0 :(得分:1)

from operator import itemgetter

data = [[6, 0, "Hello"],
        [4, 1, "Jane"],
        [3, 0, "Text"],
        [4, 1, "Bob"]]

data.sort(key=itemgetter(1, 0, 2))

print(data)  # [[3, 0, 'Text'], [6, 0, 'Hello'], [4, 1, 'Bob'], [4, 1, 'Jane']]

帮助理解:

key_function = itemgetter(1, 0, 2)
print(key_function([6, 0, "Hello"]))  # (0, 6, 'Hello')