РАЗБИРАЕМ ПО ШАГАМ
От идеи к работающему коду
Для каталога и таблицы рекордов нужны порядок и уникальность. Разберём sorted, ключ сортировки и set; отдельно договоримся, как обращаться с повторяющимися значениями.
Сразу к запуску примера ↓
- 1Правило сравнения
- 2Сортировка или уникальность
- 3Проверка повторов
1. Новый порядок через sorted
sorted возвращает новый отсортированный список, сохраняя исходный. Параметр reverse=True включает обратный порядок. list.sort() меняет исходный список и возвращает None.
Сравнивай однотипные значения: числа сортируются численно, строки — по правилам сравнения строк, а не по естественному русскому алфавиту с учётом всех языковых особенностей. Для учебных имён можно привести регистр к одному виду.
scores = [12, 5, 20, 5]print(sorted(scores))print(sorted(scores, reverse=True))print(scores)2. Сортировка записей по key
Словари нельзя просто отсортировать как числа. key указывает функцию, которая извлекает сравниваемое значение из каждой записи: например, score.
В примере именованная функция делает правило явным. Краткая запись lambda item: item["score"] выражает то же извлечение, но пока достаточно обычной def.
players = [{"name": "Анна", "score": 8}, {"name": "Иван", "score": 12}]def get_score(player): return player["score"]rating = sorted(players, key=get_score, reverse=True)for player in rating: print(player["name"], player["score"])3. Множество убирает повторы
set хранит уникальные элементы. У множества нет пользовательских индексов и гарантированного порядка обхода. Поэтому list(set(words)) не подходит, если нужно сохранить первое появление слова.
Для уникальности с исходным порядком используем два набора: список результата и множество уже встреченных значений. В результат добавляем только при первом появлении.
words = ["кот", "код", "кот", "мир"]seen = set()unique = []for word in words: if word not in seen: unique.append(word) seen.add(word)print(unique)4. Повторы и ничья в рейтинге
sorted — стабильная сортировка: записи с одинаковым ключом сохраняют свой относительный порядок из исходного набора. Это можно использовать как явное правило ничьей.
«Два лучших результата» может означать две записи или два разных значения. Для двух записей берём [:2] после сортировки. Для двух разных чисел сначала убираем повторы. Условие задачи должно указывать нужный вариант.
scores = [10, 10, 7, 3]print("Две записи:", sorted(scores, reverse=True)[:2])print("Два разных:", sorted(set(scores), reverse=True)[:2])Где легко ошибиться
- Ожидать сохранения порядка после set.
- Присвоить result = items.sort() и получить None.
- Удалить повторы там, где нужны две отдельные записи.
Проверь понимание: Всегда ли два лучших результата [10, 10, 7] равны [10, 7]?
Нет. Для двух записей это [10, 10]. [10, 7] получится только при требовании разных значений.
