Python. Пронумеровать элементы коллекции

Одна уважаемая компания заказала вам разработку теста для соискателей на позицию «дизайнер продукта». Есть список вопросов с вариантами ответа:

survey = {
  "Чем известен Джони Айв?": [
    "Придумал анимированные эмодзи",
    "Снялся в фильме про белую комнату",
    "Изобрёл мышку с зарядкой в пузе",
  ],
  "Почему важно надувать щёки?": [ ... ],
  "Сколько у вас статей про дизайн-системы?": [ ... ],
}

Вы написали код, который показывает на экране каждый вопрос с вариантами ответа:

for question, answers in survey.items():
    print(question)
    print_answers(answers)

Но есть нюанс — варианты должны быть пронумерованы. Как бы это сделать?

def print_answers(answers):
    i = 1
    for answer in answers:
        print(f"{i}: {answer}")
        i += 1

Чем известен Джони Айв?
1: Придумал анимированные эмодзи
2: Снялся в фильме про белую комнату
3: Изобрёл мышку с зарядкой в пузе

Да, но нет. Очень часто, когда видите в коде i = .. и затем i += 1 — это красный флаг. Лучше так:

def print_answers(answers):
    for idx, answer in enumerate(answers, start=1):
        print(f"{idx}: {answer}")

enumerate() возвращает итератор, который при каждом обращении выдаёт пару из счётчика и соответствующего ему элемента последовательности. А аргумент start указывает, с какого числа стартовать счётчик (по умолчанию — с нуля).

P.S. Если это для вас слишком просто, представьте себя сумасшедшим любителем однострочников и попробуйте расшифровать такое:

deque(map(print, map(lambda item: f"{item[0]}: {item[1]}", enumerate(answers, start=1))), maxlen=0)

★ Подписывайтесь на новые заметки.