python中两个list该如何排序

就是,第一个list1是分数,第二个list2是姓名,然后把list1排序之后,与之相对的把list2排序,这个怎么弄啊,虽然可能问题很简单,但是大神们救救我把Orz,提前将膝盖奉上。

这个其实很简单,先给你提供下思路,别使用自带 sort() 排序。自己写个排序算法,根据list1分数排序,在排序的过程中同时将list2姓名根据list1的排序算法走一遍,即可得到对等的序列。

#-*- coding:utf-8 -*-
name = ['a', 'b', 'c', 'd', 'e', 'f']
score = [96, 97, 92, 93, 99, 91]

def insert_sort2(num_list, name):
    """
    插入排序, 稍微修改之后
    """
    for i in range(len(num_list)-1):
        for j in range(i+1, len(num_list)):
            if num_list[i]>num_list[j]:
                num_list[i],num_list[j] = num_list[j],num_list[i]
                name[i],name[j] = name[j],name[i]
    return num_list,name

print insert_sort2(score, name)

def insert_sort(num_list):
    """
    插入排序,正常的
    """
    for i in range(len(num_list)-1):
        for j in range(i+1, len(num_list)):
            if num_list[i]>num_list[j]:
                num_list[i],num_list[j] = num_list[j],num_list[i]
    return num_list

# 输出: ([91, 92, 93, 96, 97, 99], ['f', 'c', 'd', 'a', 'b', 'e'])
# 使用 list1,list2 = insert_sort(list1, list2) 这样就可以得到了

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-14
data=[(score, name) for score, name in zip(list1,list2)] #先转化成元组
data.sort() #按照分数排序
list1=[score for score,name in data] #将排好序的分数姓名的元组分开
list2=[name for score,name in data]
这么简单,不需要楼上写的那么复杂
第2个回答  2019-04-02
#似乎可以更简单
list1 = [1, 2, 3, 4, 5, 6]
list2 = ['a', 'b', 'c', 'd', 'e', 'f']
c = list(zip(list1,list2))
c.sort(reverse = True) #降序
list1[:],list2[:] = zip(*c)
print(list1,list2)
#当然如果使用MongoDB的话,可以直接进行排序

相似回答