我的目标是简单地对不同类型的列表进行排序。我们的想法是对第一个整数列表进行排序,并根据这个新排序通过索引对第二个列表重新排序。我已经查看了很多关于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']]
另外一条信息 - 如果数据类型相同,则上述内容似乎有效。
答案 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])))