Python:每日一题 94
- 2017-11-27 14:49:00
- 六月
- 来源:
- http://bbs.fishc.com/thread-96047-1-1.html
- 转贴 569
成绩从高往低排,如果有成绩相同的名次相同,但后续的名次要算前面的总人数。
比如,两个100分的都是第一名,紧接着的99分的是第三名,而不是第二名。
给出一个列表,是全班的成绩:
- score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
- ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
- ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
- ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
- ('Y', 89), ('Z', 92)]
要求最后打印出如下的结果:三列分别是名次,姓名和成绩
- 1 T 100
- 2 S 96
- 3 J 94
- 3 K 94
- 3 P 94
- 3 W 94
- 7 C 92
- 7 Z 92
- 9 H 89
- 9 Y 89
- 11 E 88
- 11 I 88
- 11 O 88
- 14 D 87
- 15 B 86
- 15 G 86
- 17 F 85
- 18 R 84
- 19 M 83
- 20 Q 82
- 20 U 82
- 22 V 81
- 22 X 81
- 24 A 80
- 24 L 80
- 24 N 80
我的解法:
- score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
- ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
- ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
- ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
- ('Y', 89), ('Z', 92)]
- score.sort(key = lambda i: i[1], reverse = True)
- rank = 1
- max1 = score[0][1]
- for i in range(len(score)):
- if score[i][1] != max1:
- max1 = score[i][1]
- rank = i + 1
- print(rank, score[i][0], score[i][1])
发表评论