Как zip и enumerate работают вместе в Python
@python_quizРазберем этот квиз
Исходный код

Что делает каждая часть
- nums = [10, 20, 30] — простой список чисел.
- nums[1:] — срез списка, начиная со второго элемента: [20, 30].
- zip(nums, nums[1:]) — объединяет два списка парами по элементам:
- первая пара: (10, 20)
- вторая пара: (20, 30)
- zip останавливается, как только одна из последовательностей заканчивается, поэтому пары всего две.
- enumerate(...,
start=1) — нумерует полученные пары, начиная с 1:
- индексы будут 1 и 2.
- В теле цикла распаковываем i, (a, b) и печатаем i, a, b.
Ожидаемый вывод

Разбор вариантов ответа
- Вариант:
`
1 10 20
2 20 30
3 30 IndexError
`
Плохой — zip не создаёт третьей пары (30, ...), поэтому IndexError здесь не появляется. Этот вариант не совпадает с реальным выводом.
- Вариант:
`
1 10 20
2 20 30
`
Совпадает с выводом программы: две строки с индексами 1 и 2 и соответствующими парами.
- Вариант:
`
0 10 20
1 20 30
`
Неправильно, потому что enumerate используется с параметром start=1, поэтому индексация начинается с 1, а не с 0.
- Вариант:
`
1 10 20
2 20 30
3 30 0
`
Тоже неверно: zip не дополняет недостающие значения нулями и не выдаст третью строку.
Дополнительные замечания и советы
- Если нужно пройтись по соседним элементам списка, конструкция zip(nums, nums[1:]) — стандартный и идиоматичный способ.
- Если требуется, чтобы zip продолжал работать до длины самой длинной последовательности, и чтобы отсутствующие значения заполнялись каким‑то значением, используйте itertools.zip_longest:

Этот код даст:

- Помните о порядке операций: сначала создаются пары zip, затем они нумеруются enumerate, затем распаковываются в цикле.
Вывод: для данной комбинации zip и enumerate программа выведет именно две строки с индексами 1 и 2 и соответствующими значениями пар.