使用排序另一个列表的结果在Python中对列表进行排序

Ame*_*ina 10 python

我在Python中有两个列表

list_1 = [5, 2, 8];
list_2 = ['string1', 'string2', 'string3']
Run Code Online (Sandbox Code Playgroud)

我想对第一个列表进行排序并使用结果对第二个列表进行排序.

换句话说,结果应该是:

# Sorted in descending order
list_1_sorted = [8, 5, 2];
list_2_sorted = ['string3', 'string1', 'string2'];
Run Code Online (Sandbox Code Playgroud)

我知道如何单独对每个列表进行排序,但是我如何使用排序其他列表产生的索引排列来置换一个列表?

Ign*_*ams 19

施瓦茨变换

list_1_sorted, list_2_sorted = zip(*sorted(zip(list_1, list_2),
  key=operator.itemgetter(0), reverse=True))
Run Code Online (Sandbox Code Playgroud)


Wil*_*uck 16

将列表压缩在一起,排序,解压缩列表:

together = zip(list_1, list_2)
sorted_together =  sorted(together)

list_1_sorted = [x[0] for x in sorted_together]
list_2_sorted = [x[1] for x in sorted_together]
Run Code Online (Sandbox Code Playgroud)

这里发生的是zip创建一个元组列表,其中您希望列表的元素是第一个元素:

>>> a = [1,3,7,3,2]
>>> b = ["one","two",'three','four','five']
>>> zip(a,b)
[(1, 'one'), (3, 'two'), (7, 'three'), (3, 'four'), (2, 'five')]
Run Code Online (Sandbox Code Playgroud)

然后当你对它们进行排序时,它们的元素保持配对:

>>> sorted(zip(a,b))
[(1, 'one'), (2, 'five'), (3, 'four'), (3, 'two'), (7, 'three')]
Run Code Online (Sandbox Code Playgroud)

然后剩下的就是解压缩这些列表.