Чем range(len(a)) хуже enumerate — это правда «не по-питоновски»?
Ревьюер написал, что for i in range(len(a)): print(a[i]) — плохой стиль и надо enumerate. Но ведь работает же. В чём реально проблема?
3 ответа
Работает — да, но range(len(a)) заставляет лезть в список по индексу a[i] на каждом шаге, и читателю приходится держать в голове связь между i и элементом. enumerate отдаёт и индекс, и сам элемент сразу:
for i, x in enumerate(a):
print(i, x)
Коду меньше шансов ошибиться (опечатка a[j] вместо a[i] не пройдёт), и намерение очевидно. range(len(a)) оправдан только когда индекс нужен сам по себе (например, идти по двум спискам синхронно по позиции или писать в a[i]).
Это не вопрос «работает / не работает», а читаемости. PEP-стайл и линтеры (тот же ruff/pylint) прямо ругаются на range(len(...)) там, где подошёл бы enumerate.
Если индекс вообще не нужен — пиши просто for x in a.