AcWing 1502. PAT 排名
原题链接
中等
作者:
aac
,
2024-11-22 13:44:50
,
所有人可见
,
阅读 1
n = int(input())
students = []
cnt = 0
for i in range(1, n + 1):
k = int(input())
cnt += k
li = []
for j in range(k):
li.append(input().split())
li[j][1] = int(li[j][1]) # 一定要将成绩转换成整数,为了后面的排序,因为成绩的位数是不一样的,如100 > 88,但'100' < '88'
li[j].append(i)
li.sort(key=lambda x: x[1], reverse=True)
last, rank = None, None
for index, student in enumerate(li, start=1):
if student[1] != last:
rank = index
li[index - 1].append(rank)
last = student[1]
"""
append() 方法用于向列表的末尾添加一个元素。这个方法只接受一个参数,即要添加的元素本身。
当你使用 *li 语法时,你实际上是在解包列表 li,将其元素作为独立的参数传递给 append() 方法。
由于 li 包含多个元素(在这个例子中是 5 个子列表),所以 Python 解释器会尝试将这些元素作为
独立的参数传递给 append(),这导致了参数数量不匹配的错误。
如果你想将 li 列表中的所有子列表添加到 students 列表中,你应该使用 extend() 方法而不是
append()。extend() 方法接受一个可迭代对象(如列表),并将其元素逐个添加到原列表的末尾。
修改后的代码如下:
"""
# students.append(*li)
students.extend(li)
students.sort(key=lambda x: x[1], reverse=True)
last, rank = None, None
for index, student in enumerate(students, start=1):
if student[1] != last:
rank = index
students[index - 1].append(rank)
last = student[1]
# students中的一个元素如['1234567890001','95','1','2','3'] 分别对应考号,成绩,地区编号,地区排名,合并最终排名
students.sort(key=lambda x: (x[4], x[0]))
print(cnt)
for x in students:
print(f'{x[0]} {x[4]} {x[2]} {x[3]}')