使用不同的数据类型在Python中对列表进行排序

时间:2017-02-09 20:54:44

标签: python sorting

我的目标是简单地对不同类型的列表进行排序。我们的想法是对第一个整数列表进行排序,并根据这个新排序通过索引对第二个列表重新排序。我已经查看了很多关于stackoverflow的例子,但似乎没有解决这个问题。示例和我尝试过的一些内容:

test_list=[[1,2,5,1,7,4],['A','B','C','D','E','F']]

我的目标:

[[1,1,2,4,5,7],['A','D','B','F','C','E']]

#TRY 1
test_list.sort(key=operator.itemgetter(0))
In [96]: test_list
Out[96]: [[1, 2, 5, 1, 7, 4], ['A', 'B', 'C', 'D', 'E', 'F']]

#TRY 2
In [97]: sorted(test_list,key=lambda x: x[0])
Out[97]: [[1, 2, 5, 1, 7, 4], ['A', 'B', 'C', 'D', 'E', 'F']]

另外一条信息 - 如果数据类型相同,则上述内容似乎有效。

1 个答案:

答案 0 :(得分:4)

这将有效:

zip(*sorted(zip(*test_list)))

因为这会产生元组,所以你必须这样做

map(list, zip(*sorted(zip(*test_list))))
# in Python 3 you also have to turn the map object into a list again
# list(map(list, zip(*sorted(zip(*test_list)))))

取回原始列表。

它的作用:

  • zip两个列表
  • 对结果对进行排序
  • 将它们转置回来

它将使用第二个列表中的元素作为打破平局,因为它会对列表进行排序。如果您希望排序在第一个列表中保持稳定,则必须使用键功能:

list(zip(*sorted(zip(*test_list), key=lambda t: t[0])))