1804: 【Python】二维数据排序(2)

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:31 Solved:12

Description

存储学生的成绩信息的列表,格式:姓名,成绩,年龄。具体如下:
li = [("杜甫", 249, 18), ("高适", 249, 28 ), ("李白", 278, 35), ("卧龙", 289, 157 ),("八戒", 218, 948), ("悟空", 249, 859)]
我们希望按照分数来排序,分数由高到低,如果分数一样,则按照年龄升序(小的排在前面)排序。
li.sort(key=lambda x: (-x[1], x[2]))    
其中的参数key指定了比较的规则,本例中,lambda表达式中的x是列表的一个元素, 因为是一个二维列表,故x[1]是成绩,x[2]是年龄,我们将它们组合成一个元组作为比较的标准,因为成绩希望由高到低故将其设为原来的负数,因为默认是升序排列,设为原来的负值后,即间接的实现了降序排序(大的在前面)。
排序后:
[('卧龙', 289, 157), ('李白', 278, 35), ('杜甫', 249, 18), ('高适', 249, 28), ('悟空', 249, 859), ('八戒', 218, 948)]

【题目描述】
输入学生的成绩,并完成排名,按照总分优先,如果总分相同比语文,如果仍然一样,则比数学,最后比英语,如果仍然一样则比姓名(升序)。


Input

输入人数n。
后面n行,每一行输入一个学生的成绩,格式为:姓名  语文成绩 数学成绩 外语成绩

Output

输出n行。
每一行格式:名次  姓名  语文成绩 数学成绩 外语成绩 总分

Sample Input Copy

5
xiaoqiang 88 89 88
mingming 58 98 69
libai 85 78 98
dufu 86 77 98
sushi 78 98 74

Sample Output Copy

1 xiaoqiang 88 89 88 265
2 dufu 86 77 98 261
3 libai 85 78 98 261
4 sushi 78 98 74 250
5 mingming 58 98 69 225