专业编程基础技术教程

网站首页 > 基础教程 正文

如何在 Python 中同时对平行列表进行排序

ccvgpt 2024-12-11 11:02:18 基础教程 1 ℃

如何在 Python 中同时对平行列表进行排序?假如,有两个列表,一个存储参赛选手编号,一个存储参赛选手成绩,两者一一对应。

chengji=[7.5,9.6,7.2,8.6,6.3,9.2]

如何在 Python 中同时对平行列表进行排序

bianhao=["01","02","03","04","05","06"]

对成绩进行排序,同时排序选手编号,保持数据一一对应。

使用冒泡算法

通过使用双重循环,很容易实现冒泡排序的程序设计。用外层循环控制比较轮次,用内层循环控制每轮内的数据比较次数。

仅对分数排序,无法区分是哪位选手的成绩。同时对编号列表同步排序,实现编号与得分对应,符合交换条件时同步交换,从而能够确定参赛选手的具体得分和位次。

chengji=[7.5,9.6,7.5,8.6,6.3,9.2]
bianhao=["01","02","03","04","05","06"]
for k in range(1,len(chengji)):
    for i in range(len(chengji)-k):
        if chengji[i]<chengji[i+1]:  #判断相邻两数值的大小
           chengji[i],chengji[i+1]=chengji[i+1],chengji[i]
           bianhao[i],bianhao[i+1]=bianhao[i+1],bianhao[i] #编号同步交换
mc=0
for i in range(0,len(chengji)):
    if  chengji[i]<chengji[i-1]: #名次并列处理
        mc=i
    print("第%d名  得分:%.2f 选手编号:%s" %(mc+1,chengji[i],bianhao[i]))

运行结果:

第1名  得分:9.20 选手编号:06
第2名  得分:8.60 选手编号:04
第3名  得分:7.50 选手编号:01
第3名  得分:7.50 选手编号:03
第5名  得分:6.30 选手编号:05

使用 zip() 和 sorted() 函数

使用 zip() 函数对两个列表中的相应元素进行配对,然后使用 sorted()根据一个列表的值对另一个列表进行排序。

chengji=[7.5,9.6,7.5,8.6,6.3,9.2]
bianhao=["01","02","03","04","05","06"]
combined_lists = list(zip(chengji, bianhao))
sorted_lists = sorted(combined_lists, key=lambda x: x[0], reverse=True)
sorted_list1 = [item[0] for item in sorted_lists]
sorted_list2 = [item[1] for item in sorted_lists]
mc = 0
for i in range(0,len(sorted_list1)):
    if  sorted_list1[i]<sorted_list1[i-1]: #名次并列处理
        mc=i
    print("第%d名  得分:%.2f 选手编号:%s" %(mc+1,sorted_list1[i],sorted_list2[i]))

使用字典

将两个列表合并为字典,对字典按值进行排序,然后拆分为两个排序列表。

chengji=[7.5,9.6,7.5,8.6,6.3,9.2]
bianhao=["01","02","03","04","05","06"]
dict1 = {}
dict1 = {bianhao[i]: chengji[i] for i in range(len(chengji))}
dict1 = {k: v for k, v in sorted(dict1.items(), key=lambda item: item[1], reverse=True)}
lst1 = [i for i in dict1.keys()]
lst2 = [i for i in dict1.values()]
mc = 0
for i in range(0,len(lst1)):
    if  lst2[i]<lst2[i-1]: #名次并列处理
        mc=i
    print("第%d名  得分:%.2f 选手编号:%s" %(mc+1,lst2[i],lst1[i]))

最近发表
标签列表