Источник: Nuances of Programming
Цикл for. Краеугольный камень программирования. Технологический приём, который вы осваиваете, ещё будучи новичком, и продолжаете использовать в течение всей своей карьеры программиста.
Если вы использовали другие популярные языка, например PHP или JavaScript, вы знакомы с использованием переменной для отслеживания текущего индекса.
Важно понимать, что эти циклы for фактически не выполняют итерацию по массиву. Они перебирают выражение, которое служит посредником для ссылки на каждое значение массива.
В примере выше i не имеет явного отношения к scores, просто оно совпадает с каждым необходимым значением индекса.
Старый (плохой) способ
В Python традиционный цикл for в показанном выше виде не существует. Однако, почему бы не адаптировать любимый способ под язык?
В результате быстро обнаруживается функция range() и получается подобный код:
Проблема с этим циклом for состоит в том, что он не очень в стиле Python. То есть мы не перебираем список, а используем i в качестве предварительного индекса.
На самом деле даже в JavaScript существуют методы прямого перебора массива (forEach() и for…of).
Использование функции enumerate()
Если вы хотите правильно отслеживать “значение индекса” в цикле for в Python, используйте функцию enumerate(), которая “считает” итерируемое. Её можно использовать для других типов данных: строк, кортежей и словарей.
Функция принимает два аргумента: итерируемое и необязательный аргумент начала отсчёта.
Если начало отсчёта не задано, по умолчанию оно будет 0. Затем функция будет возвращать кортежи с текущим порядковым номером и соответствующим значением итерируемого.
scores = [54,67,48,99,27]
for i, score in enumerate(scores):
print(i, score)
Этот код намного чище! Мы избегаем работы со списками индексов, перебираем фактические значения и явно видим каждое значение в определении цикла for.
В качестве бонуса: обычно, если нужно напечатать нумерованный список, приходится добавлять i + 1 из-за того, что первый индекс 0. Просто передайте значение 1 в enumerate() и наслаждайтесь магией!
Надеюсь, статья была вам полезна. Другие полезные рекомендации вы можете найти в моей статье 4 простых способа рефакторинга кода.
Читайте также:
Читайте нас в телеграмме и vk
Перевод статьи Jonathan Hsu: Stop Using range() in Your Python for Loops