2025, Sep 24 09:18

Читаемый вывод списка кортежей в Python: распаковка, f-строки и enumerate

Показываем, как сделать читаемый вывод списка кортежей в Python: прямой обход, распаковка пар, f-строки и enumerate для нумерации. Понятные примеры кода.

Читаемый вывод списка кортежей в Python

Работа со списком кортежей вроде (предмет, оценка) — обычное дело, но вывод «сырого» списка в stdout плохо читается. Если просто напечатать список, получится синтаксис кортежей, а не аккуратный, понятный отчёт. Разберём минимальное изменение, которое делает результат наглядным, не меняя структуру данных и логику.

Пример проблемы

Данные хранятся как список пар (предмет, оценка). Текущая функция печати выводит сам объект списка, из‑за чего показывается стандартное представление кортежей в Python.

entries = [('English', 78), ('Mathematics', 99)]
def show_report():
    print(entries)
show_report()

Результат будет примерно таким:

[('English', 78), ('Mathematics', 99)]

Технически это верно, но для человека неудобно.

Что пошло не так

Попытка итерироваться с помощью range по списку или строке приводит к TypeError, потому что range ждёт целое число, а не список. Идиоматичный подход в Python — перебирать сам итерируемый объект напрямую. Поскольку каждый элемент списка — это кортеж, удобно сразу распаковывать его в две переменные во время обхода.

Общий шаблон прост: for item in iterable:. Применяя его к списку кортежей, можно сразу распаковывать значения на лету.

Решение: итерируемся, распаковываем, форматируем

Итерируйтесь по списку, распаковывайте каждую пару (предмет, оценка) и форматируйте строку через f‑строку для наглядности. Так модель данных и поведение не меняются, а вывод становится приятнее.

entries = [('English', 78), ('Mathematics', 99)]
def show_report():
    for topic, score in entries:
        print(f"{topic} => {score}")
show_report()

Вывод становится кратким и понятным:

English => 78
Mathematics => 99

Нумерация строк с enumerate (необязательно)

Если нужны номера строк, enumerate присваивает индекс каждому элементу при обходе. Это полезно, когда в выводе важен порядок. Распаковка работает так же, а счёт можно начать с 1.

entries = [('English', 78), ('Mathematics', 99)]
def show_report_numbered():
    for idx, (topic, score) in enumerate(entries, start=1):
        print(f"{idx}. For subject {topic} the mark is {score}")
show_report_numbered()

Тогда вывод будет с нумерацией:

1. For subject English the mark is 78
2. For subject Mathematics the mark is 99

Почему это важно

Читаемый вывод упрощает повседневные задачи: быструю проверку, демонстрации, работу в консоли. Прямой обход итерируемых объектов и распаковка кортежей — базовые приёмы, которые предотвращают типичные ошибки, делают код компактнее и облегчают просмотр результатов.

Выводы

Когда связанные значения хранятся в кортежах, проходите по списку и распаковывайте пару прямо в цикле. Добавьте f‑строку — и получите чистое форматирование. Нужна позиционная информация — используйте enumerate: это простой способ добавить индексы без изменения данных и логики.

Статья основана на вопросе с StackOverflow от PCuser2009 и ответе от anatolyg.