Как отсортировать и распечатать N количество рекордов (сначала самое высокое) - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь отсортировать список лидеров моей простой игры и распечатать 5 лучших результатов, но он просто распечатывает весь список в том порядке, в котором он был сохранен и не организован после добавления for eachline in y[:5]: print(eachline), как без этот код печатает весь список в числовом порядке от наименьшего к наибольшему, что мне не нужно. Любая помощь приветствуется. Ссылка на файл списка лидеров: https://drive.google.com/open?id=1w51cgXmmsa1NWMC-F67DMgVi3FgdAdYV

leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
    leaders.append(line.strip())

y = sorted(leaders, key = lambda x: float(x[0]))
for eachline in y[:5]: #after this and the next line it prints just the file contents
    print(eachline)

1 Ответ

0 голосов
/ 23 января 2020

Это отчасти потому, что ваши входные файлы представляют собой строки, структурированные как «Integer: String». Когда вы открываете файл и начинаете читать построчно и вызываете line.strip(), вы просто удаляете все лишние пробелы в начале и конце каждой строки строки.

Имея это в виду, когда вы сортируете, вы используете клавишу lambda x: float(x[0]). Это говорит функции sorted, что нужно взять каждого человека в списке лидеров и взять первый символ каждой строки (потому что все члены списка лидеров являются строками!) И преобразовать этот первый символ в число с плавающей точкой. Значение float(x[0]) для всех людей в списке лидеров - 1, что означает, что алгоритм сортировки считает, что ваши значения уже отсортированы!

Чтобы исправить это, вы можете использовать split() .

leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
    for line in fin:
        leaders.append(line.split())
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
for eachline in y[:5]: #after this and the next line it prints just the file contents
    print(" ".join(eachline))

Вывод:

19 : Felix
16 : Muhammad
14 : Steve
13 : David
12 : Alex

Можно отсортировать в порядке убывания, добавив ключевое слово reverse=True в метод сортировки.

y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
...