使用另一个列表的索引对python列表进行排序

时间:2018-10-29 21:53:49

标签: python python-2.7 list

我想对包含数字的python列表进行排序(例如l1),并使用该列表的索引(排序顺序)重新排列两个不同列表(l2和l3)的元素。我想使用标准的python库(不是pandas)来实现这一点。我正在使用python 2.7。

例如,假设:

l1 = [2,4,5,1]
l2 = ['aa', 'bb', 'cc', 'dd']
l3= ['a_a', 'b_b', 'c_c', 'd_d']

在这里,我想按降序对l1进行排序,使得l1_sorted = [5,4,2,1]

其他列表(l2和l3)将按照l1中的排序索引(l1_sorted)重新排列。在上面的示例中,我们应该有:

l2_sorted = ['cc', 'bb', 'aa', 'dd']
l3_sorted = ['c_c', 'b_b', 'a_a', 'd_d']

目前,我正在使用Python(l1_sorted = sorted(l1, reverse=True))的排序函数。但这只给了我l1_sorted。

如何实现所需的全部功能(即l2_sorted和l3_sorted)?

1 个答案:

答案 0 :(得分:5)

将它们压缩在一起,分类,然后解压:

zipd = sorted(zip(l1,l2,l3), key=lambda t:-t[0])
l2_sorted = [t[1] for t in zipd] #['cc', 'bb', 'aa', 'dd']
l3_sorted = [t[2] for t in zipd] #['c_c', 'b_b', 'a_a', 'd_d']