任务描述
本关任务:编写一个能分析二维列表中数据的小程序。
相关知识
为了完成本关任务,你需要掌握:
1.二维列表排序
2.多关键字排序
二维列表排序
ls.sort(*, key=None, reverse=False)
sorted(ls, key=None, reverse=False)
排序方法参考第4关讲解。
二维列表排序一般用参数key=lamdba x: x[n]指定根据子列表 x 中序号为n 的数据项进行排序。
# 根据二维列表最后一个元素(序号-1)降序排序输出
score_ls = [[8.5, 7.5, 7.3, 7.9, 7.9, 8.5, 8.0, 7.6, 7.9], [9.1, 9.4, 8.9, 9.1, 9.12], [7.5, 8.0, 7.7, 7.9, 7.78], [7.2, 7.1, 6.8, 7.1, 6.2, 6.4, 6.9, 6.81], [8.1, 8.1, 7.9, 7.9, 7.5, 7.2, 7.8, 8.0, 7.81]]
print(sorted(score_ls, key=lambda x: x[-1],reverse=True))
# [[9.1, 9.4, 8.9, 9.1, 9.12],
# [8.5, 7.5, 7.3, 7.9, 7.9, 8.5, 8.0, 7.6, 7.9],
# [8.1, 8.1, 7.9, 7.9, 7.5, 7.2, 7.8, 8.0, 7.81],
# [7.5, 8.0, 7.7, 7.9, 7.78],
# [7.2, 7.1, 6.8, 7.1, 6.2, 6.4, 6.9, 6.81]]
多关键字排序
二维列表多关键字排序一般用参数key=lamdba x: (x[n],x[m],...)指定,依次优先根据元组(x[n],x[m],...)中的项进行排序,主关键字x[n]值相同时,再根据次关键字 x[m]值排序,依此类推。
当要求两个排序关键字一个升序一个降序时,可以将其中一个关键字设为负值。
score_ls = [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6]]
for i in range(len(score_ls)): # 遍历二维列表的长度,i为子列表的序号
avg = sum(score_ls[i])/len(score_ls[i]) # 计算当前序号子列表元素的平均值
score_ls[i].append(round(avg, 2)) # 修改当前序号的子列表,附加一个元素到列表末尾
print(score_ls)
# [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0, 6.44], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6, 7.83]]
2.创建一个新的二维列表容纳附加了平均成绩的数据
score_ls = [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6]]
score_new = []
for lst in score_ls: # 遍历二维列表的长度,i为子列表的序号
avg = sum(lst)/len(lst) # 计算当前序号子列表元素的平均值
lst.append(round(avg, 2)) # 修改当前序号的子列表,附加一个元素到列表末尾
score_new.append(lst)
print(score_new)
# [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0, 6.44], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6, 7.83]]
10位评委为参加程序设计创意赛的选手打分,评分规则是允许弃权,弃权的成绩户数空字符串,其他评分在0-10分之间,包含0和10。评委中最后一人为仲裁,此人不允许弃权(成绩非空)。
文件'mark_score.csv'中保存多位选手的成绩,每行为一位选手的成绩,各成绩之间用半角逗号分隔,编程读取各选手成绩。
编程要求
根据提示,在右侧编辑器补充代码,使程序能将文件中的数据转为子列表元素是浮点数的二维列表,去掉每位选手的一个最高分和一个最低分,计算每位选手的平均分并附加到子列表末尾(平均分保留小数点后2位)。
将二维列表根据平均成绩降序排序,当平均成绩相同时,根据仲裁成绩升序排序
输入一个整数n,以列表形式输出排序后前n位选手的成绩。
测试说明
平台会对你编写的代码进行测试:
测试输入:
10
预期输出(下面为示例数据,非正确输出):
[[8.8, 9.7, 8.9, 8.8, 9.5, 9.7, 8.9, 9.5, 9.35],
[8.6, 9.7, 9.2, 9.6, 9.2, 9.7, 9.5, 8.8, 9.29],
[9.0, 9.4, 9.6, 9.6, 9.0, 9.6, 9.1, 8.9, 9.28],
[9.0, 9.0, 9.2, 8.8, 9.6, 9.3, 9.1, 9.9, 9.24],
[9.8, 9.8, 8.6, 9.6, 9.1, 8.6, 9.6, 8.7, 9.23],
[9.6, 9.4, 8.8, 9.4, 8.5, 9.3, 9.8, 8.7, 9.16],
[9.1, 9.4, 8.9, 9.1, 9.12],
[9.3, 9.4, 9.6, 9.6, 8.4, 9.4, 8.8, 8.2, 9.09],
[8.8, 9.2, 9.4, 8.6, 9.5, 9.3, 9.5, 8.7, 9.06],
[9.1, 9.5, 8.6, 9.3, 8.7, 9.5, 9.1, 8.9, 9.06]]
开始你的任务吧,祝你成功!
最新发布