我如何在列表的新顺序上对其他几个列表进行排序。 示例:
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
的位置。我希望我说得很清楚,用言语解释不是那么容易。现在有人这样做吗?
答案 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))