根据python中第二个列表的升序对列表进行排序

时间:2020-08-13 12:56:48

标签: python list sorting

我有两个未排序的列表x和y,如下所示:

x = ["a", "b", "c", "d", "e"] 
y = [ 5,   1,   4,   2,   3] 

我想对列表y进行两次排序,一次是升序,然后是降序。但是,在y的每次排序中,我还需要相应地对列表x的相应元素进行排序。 两个列表的项目长度相同。

我尝试使用以下代码,但无法正常工作:

def sort_list(list1, list2): 

    zipped_pairs = zip(list2, list1) 

    z = [x for _, x in sorted(zipped_pairs)] 
  
    return z 

print(sort_list(x, y)) 

预期输出:以升序排列

x = [ "b", "d","e", "c", "a"] 
y = [  1,   2, 3, 4,  5] 

有帮助吗?

6 个答案:

答案 0 :(得分:1)

尝试使用key中的sorted参数,并保留许多相同的代码:

def sort_list(list1, list2):
    zip_pairs=zip(list2, list1)
    z = sorted(zip_pairs, key=lambda x: x[0])
    return z

x, y = zip(*sort_list(x,y))
print(x,y)

输出:

(1, 2, 3, 4, 5) ('b', 'd', 'e', 'c', 'a')

答案 1 :(得分:1)

~/code/lua/scratch $ lua calc.lua 
3
4
/
0.75
~/code/lua/scratch $ lua calc.lua 
7
3
//
2

答案 2 :(得分:1)

只需按顺序压缩yx-这样,您就可以按结果的元组的第一项对它们进行排序。

然后您可以排序并再次压缩:

x = ["a", "b", "c", "d", "e"] 
y = [ 5,   1,   4,   2,   3] 

sorted_y, sorted_x = zip(*sorted(zip(y, x)))

print(sorted_x, sorted_y)
#('b', 'd', 'e', 'c', 'a') (1, 2, 3, 4, 5)

以相反的顺序:

sorted_y, sorted_x = zip(*sorted(zip(y, x), reverse=True))
print(sorted_x, sorted_y)
# ('a', 'c', 'e', 'd', 'b') (5, 4, 3, 2, 1)

答案 3 :(得分:0)

我尝试通过组合两个数组,然后根据数组的第二列对整个数组进行排序。假设数组如下:

db.collection(this.state.email).doc("UserProfile").set(data).then(() =>{
    this.copyMathDatabase().then(() => {
        this.copyEnglishDatabase();
    });
});

现在,使用第二列对arr = [['a',5],['b',1],['c',4],['d',2],['e',3]] 变量进行如下排序:

arr

输出

arr.sort(key = lambada x:x[1])

现在,访问数组的第一个元素

答案 4 :(得分:0)

此功能有效,我还添加了反转顺序变量:

import numpy as np


def sort_list(list1, list2, invert = False): 

    sorted_idex = np.argsort(list2)
    if invert:
        return list1[sorted_idex[::-1]], list2[sorted_idex[::-1]]
    else:
        return list1[sorted_idex], list2[sorted_idex]


x = np.array(["a", "b", "c", "d", "e"])
y = np.array([ 5,   1,   4,   2,   3])

print(sort_list(x, y)) 
print(sort_list(x, y, invert=True)) 

给出结果:

(array(['b', 'd', 'e', 'c', 'a'], dtype='<U1'), array([1, 2, 3, 4, 5]))
(array(['a', 'c', 'e', 'd', 'b'], dtype='<U1'), array([5, 4, 3, 2, 1]))

答案 5 :(得分:0)

x和y是两个默认参数,假定它们位于List中。解决方案是不使用zip。

    x = ["a", "b", "c", "d", "e"] 
    y = [ 5,   1,   4,   2,   3]
    X, Y = [], sorted(y)
    for i in Y:
        X.append(x[y.index(i)])
    x,y = X,Y 
    print(x)
    print(y)