根据最大顺序对多个列表进行排序

时间:2018-10-31 18:25:35

标签: python list sorting

我如何在列表的新顺序上对其他几个列表进行排序。 示例:

lst1=[3,5,1,7]
lst2= [1,2,3,4]
lst3=[100,99,98,97]
lst4 = [20,17,192,309]

list1_set=list(sorted((set(lst1))))
list1_set.reverse()
#gives me lst1=[7,5,3,1]

现在,我希望其他列表以相同的方式排序,以便看起来像这样:

lst2=[4,2,1,3]
lst3=[97,99,100,98]
lst4=[309,17,20,192]

表示所有列表中所有项目之前在n位置的每个项目在之后m的位置。我希望我说得很清楚,用言语解释不是那么容易。现在有人这样做吗?

2 个答案:

答案 0 :(得分:4)

创建相关索引idx,然后仅使用getitem / list理解即可:

>>> idx = sorted(range(len(lst1)), key=lst1.__getitem__, reverse=True)
>>> [lst2[i] for i in idx]
[4, 2, 1, 3]
>>> [lst3[i] for i in idx]
[97, 99, 100, 98]
>>> [lst4[i] for i in idx]
[309, 17, 20, 192]

答案 1 :(得分:2)

您可以zip将所有列表放在一起,根据所需列表进行排序,然后打开zip的包装以接收排序后的列表:

lst1=[3,5,1,7]
lst2=[1,2,3,4]
lst3=[100,99,98,97]
lst4=[20,17,192,309]

lst1, lst2, lst3, lst4 = zip(*sorted(zip(lst1, lst2, lst3, lst4), key=lambda x: x[0], reverse=True))