Как zip и enumerate работают вместе в Python

Как zip и enumerate работают вместе в Python

@python_quiz

Разберем этот квиз

Исходный код

python

Что делает каждая часть

  • 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.

Ожидаемый вывод

text

Разбор вариантов ответа

  • Вариант:

`
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:
python

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

text
  • Помните о порядке операций: сначала создаются пары zip, затем они нумеруются enumerate, затем распаковываются в цикле.

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

Report Page