JustCaptain kod-buduschego
0c215d6bd3ad548a5cf5fee4d168ffd04adaac92
Перейти к файлу
Код
kod-buduschego Python 2025-20263.5. Функция enumerateMATERIAL.md
anc update c70a58f 8 октября 2026 г.
MATERIAL.md
  1. Назначение enumerate

enumerate() — встроенная функция Python для итерируемых объектов.

Задача:

  • получить индекс элемента
  • и сам элемент одновременно
  • без ручного счётчика

⸻

  1. Сигнатура

enumerate(iterable, start=0)

Параметры:

  • iterable — любой итерируемый объект (list, tuple, str, dict, generator)
  • start — начальное значение индекса (по умолчанию 0)

Возвращает:

  • объект enumerate (итератор)

⸻

  1. Базовый пример

items = ['a', 'b', 'c']
for index, value in enumerate(items):
print(index, value)

Результат:

0 a
1 b
2 c

⸻

  1. С параметром start

for index, value in enumerate(items, start=1):
print(index, value)

Результат:

1 a
2 b
3 c

⸻

  1. Внутреннее поведение

enumerate эквивалентен:

def my_enumerate(iterable, start=0):
i = start
for item in iterable:
yield i, item
i += 1

⸻

  1. Работа с разными типами

6.1 Список

lst = [10, 20, 30]
for i, v in enumerate(lst):
print(i, v)

6.2 Строка

s = "abc"
for i, ch in enumerate(s):
print(i, ch)

6.3 Словарь

d = {'x': 1, 'y': 2}
for i, key in enumerate(d):
print(i, key, d[key])

⸻

  1. Преобразование в список

list(enumerate(['a', 'b']))

Результат:

[(0, 'a'), (1, 'b')]

⸻

  1. Использование без распаковки

e = enumerate(['a', 'b'])
print(next(e)) # (0, 'a')
print(next(e)) # (1, 'b')

⸻

  1. Частые сценарии

9.1 Индексация при фильтрации

data = [5, 10, 15]
for i, v in enumerate(data):
if v > 8:
print(i, v)

9.2 Изменение элементов списка

lst = [1, 2, 3]
for i, v in enumerate(lst):
lst[i] = v * 2

⸻

  1. Альтернатива без enumerate

for i in range(len(items)):
print(i, items[i])

Минусы:

  • менее читаемо
  • больше кода
  • риск ошибок при изменении структуры

⸻

  1. Комбинация с другими функциями

11.1 С zip

a = ['x', 'y']
b = [1, 2]
for i, (x, y) in enumerate(zip(a, b)):
print(i, x, y)

⸻

  1. Ошибки

12.1 Неправильная распаковка

for x in enumerate([1,2,3]):
print(x)

Результат:

(0,1)
(1,2)
(2,3)

Решение:

for i, v in enumerate([1,2,3]):
...

⸻

12.2 Попытка изменить индекс

for i, v in enumerate(lst):
i = 10 # не влияет на enumerate

Индекс — копия, не ссылка.

⸻

  1. Производительность
  • enumerate быстрее и безопаснее ручного счётчика
  • не создаёт промежуточные списки
  • работает лениво (lazy iterator)

⸻

  1. Когда использовать

Использовать:

  • нужен индекс + значение
  • проход по коллекции

Не использовать:

  • индекс не нужен
  • работаешь с генераторами, где индекс не имеет смысла

⸻

  1. Итог

enumerate:

  • упрощает код
  • снижает ошибки
  • улучшает читаемость
  • стандарт де-факто для индексации в циклах