Найдите второе место в рейтинге - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в программировании и столкнулся с проблемой при решении этой проблемы HackerRank. https://www.hackerrank.com/challenges/nested-list/problem?h_r=next-challenge&h_v=zen Мой код работает нормально, но я не могу получить желаемый результат.

student_marks = {}
lsit_name = []
lsit_marks = []
N = int(input())

for _ in range(N):
    name = input()
    score = float(input())
    student_marks[name] = [score]
    lsit_marks.append(score)
    lsit_name.append(name)

final = []

for i in range(len(student_marks)):
    if lsit_marks[i] < max(lsit_marks):
        final.append(lsit_marks[i])
print(lsit_name[lsit_marks.index(max(final))])


final_1 = []

for i in range(len(final)):
    if final[i] < max(final):
        final_1.append(final[i])

print(lsit_name[lsit_marks.index(max(final_1))])

1 Ответ

0 голосов
/ 18 июня 2020

Я думаю, что лучший способ получить go - использовать словарь, в котором оценки будут использоваться в качестве ключей. Упорядочив список соответствующим образом, вы можете ввести пары «ключ-значение» в словарь, чтобы при последующей печати вы получали желаемый результат.

Это использует тот факт, что, как и для Python 3.6, словари поддерживают порядок вставки. Если вы используете предыдущую версию Python, вы захотите использовать вместо этого объект OrderedDict из модуля collections.

students = [[input(), float(input())] for _ in range(int(input()))]
d = dict()
for name, grades in sorted(students, key=lambda x: (x[1], x[0])):
    d.setdefault(grades, []).append(name)
print(*d[list(d.keys())[1]], sep='\n')

Итак, для следующего ввода:

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

Вы получите следующий результат:

Berry
Harry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...