Как бы отсортировать вложенный список по второму элементу в списке, а затем вывести второй самый низкий элемент во всем списке? - PullRequest
0 голосов
/ 31 января 2020

Это практический тест HackerRank Python: Проблема с вложенным списком HackerRank

Я прохожу 8 из 10 тестовых случаев, но получаю неправильный ответ для 2 из них. Любой совет?

Вот мой код представления:

students = []
current_list = []

if __name__ == '__main__':
    for _ in range(int(input())):
        name = input()
        score = float(input())
        current_list = [name, score]
        students.append(current_list)

students = sorted(students, key = lambda x: x[1])

#print(students)
#print(students[1][0])

if students[2][1] == students[1][1]:
  final_list = students[1:3]
  final_list_sorted = sorted(final_list, key = lambda x: x[0])
  print(final_list_sorted[0][0])
  print(final_list_sorted[1][0])
else:
  print(students[1][0])

1 Ответ

0 голосов
/ 03 февраля 2020

Я бы предположил, что ваша проблема здесь в том, что в отношении этой части описания проблемы HackerRank -

Примечание: Если есть несколько учеников с одинаковым классом, упорядочите их имена в алфавитном порядке и напечатайте каждое имя в новой строке.

- ваш код предполагает, что «множественный» всегда будет равен двум, тогда как это может быть три или более, в этом случае ваш вывод не будет будь прав. Другая проблема заключается в том, что в вашем коде также предполагается, что никогда не будет нескольких студентов с самым низким показателем.

Я также отмечу, что если вы использовали [score, name] вместо [name, score] в качестве ввода для каждого студента тогда students.sort() или students = sorted(students) автоматически сортируют в порядке возрастания, в основном по классу и по имени, сохраняя вам некоторые шаги.

...