python之升序降序排列

1.贴题

题目来自大学计算机–Python算法实践(东北大学)
考试


初始化如下列表
alist = [20170123, 61, 20170233, 97, 20170123, 72, 20170233, 65, 20170110, 97]
该列表中下标为偶数的元素表示某个学生的学号,其后紧跟着的下标为奇数的元素表示该学生某门课程的成绩。
编程对该列表进行重新排序。(不限制使用函数或列表方法)
要求:
1、保持一个学号紧跟着一个成绩的数据格式不变
2、以学号按升序排列,当学号相同时,以成绩按降序排列


2.说明

思路如下
1. 将列表以(学号,成绩)的形式打包添加到新列表
2. 将新列表以先按学号升序,再按成绩降序排序
3. 将排序后的新列表再按逐个元素输出的方式覆盖输出到alist

3.参考代码

blist = [] #构建新的空列表blist
for i in range(len(alist)): #遍历alist的下标
    if i % 2 == 0: #如果下标为偶数
        blist.append((alist[i],alist[i+1])) #将该下标的元素和后一个元素打包成tuple添加到blist
blist.sort(key=lambda x: (x[0],-x[1]))    #将新列表以先按学号升序,再按成绩降序排序
alist = [] #将alist重新赋值为空列表
for i in range(len(blist)): #遍历blist的下标
    alist.append(blist[i][0]) #向alist中添加blist该下标中的第0个元素(学号)
    alist.append(blist[i][1]) #向alist中添加blist该下标中的第1个元素(成绩)
print(alist) #打印输出新的alist

4.参考资料

python3 sort sorted 函数应用

你可能感兴趣的:(python3,python基础题详解,python3,基础,排序,解说)