В программе Python программисты часто используют цикл for для создания цикла на итерируемом объекте. По сути, это означает, что вам не потребуется счетная переменная для доступа к элементам внутри итерируемого объекта. Однако в некоторых случаях программистам требуется переменная, способная изменяться на каждой итерации цикла. Вместо создания и увеличения переменных всегда можно использовать функцию enumerate () для получения счетчика и значения одновременно.
Итерация с помощью циклов, присутствующих в Python
Цикл for в Python использует итерацию на основе коллекции, что означает, что Python стремится присваивать элемент переменным цикла (из iterables) на каждой итерации. Вот пример.
Значения в этом примере представляют собой список, содержащий 3 строки, которые являются алфавитами a, b и c. В программе Python списки рассматриваются как вариант итерируемых объектов. Переменная цикла, присутствующая в цикле for, – value. Следует также иметь в виду, что на каждой итерации цикла значение имеет тенденцию устанавливаться на следующий элемент, и оно происходит из значений команд.
После этого вы должны начать печатать значение на экране. Одно из главных преимуществ итераций на основе коллекций заключается в том, что они позволяют избежать ошибок, часто встречающихся во многих других языках программирования.
Предположим, что помимо значения вы планируете выводить на экран индекс элемента на каждой итерации. Эффективным способом решения этой задачи будет формирование переменной для хранения индекса. Как только вы это сделаете, вы сможете обновлять ее на каждой итерации, что будет выглядеть примерно так:
В примере, приведенном выше, индекс – это целое число, отслеживающее вашу позицию в списке. На каждой итерации цикла вы будете печатать индекс длиной со значением. Последний шаг в цикле потребует от вас обновления числа, присутствующего в индексе (убедитесь, что вы обновляете его на единицу). Вы заметите ошибку, если не будете обновлять индекс на каждой итерации. Вот как это может выглядеть
В примере можно заметить, что каждый индекс на каждой итерации остается равным 0. Это происходит потому, что его значение не было обновлено кодом в конце цикла. Отследить подобную ошибку может быть невероятно сложно, особенно в сложных и длинных циклах.
Эффективным способом решения этой проблемы является комбинирование range() и len() для создания индекса. Эта тактика часто рекомендуется потому, что она помогает создавать индексы автоматически, избавляя вас от необходимости помнить, когда нужно сделать обновление.
Правильное использование enumerate() в Python
Программисты могут использовать enumerate() в рамках одного цикла точно так же, как они использовали бы исходный объект iterable. Вместо того чтобы добавлять итерируемый объект непосредственно после in present in for, вы поместите его в круглые скобки команды enumerate(). Кроме того, вам нужно будет внести небольшие изменения в переменную цикла. Вот пример, который показывает, как это будет выглядеть:
После ввода команды enumerate() вы получите от функции 2 переменные цикла, которые будут состоять из счетчика текущей итерации и значения элемента текущей итерации.
Как и в обычном цикле for, переменным цикла можно дать любое имя. В приведенном выше примере были использованы слова value и count. Однако вы также можете назвать их v и i или любым другим именем, если оно допустимо в Python.
При использовании функции enumerate () вам не нужно запоминать, когда обращаться к элементу в итерабельной таблице. Что делает ситуацию еще лучше, так это то, что вам не нужно помнить о продвижении индекса, присутствующего в конце цикла. Python заботится практически обо всем автоматически, что позволяет не беспокоиться о запоминании важных деталей.
Важное замечание
Использование двух переменных цикла – value и count – при разделении их запятой демонстрирует распаковку аргументов. Это невероятно мощная функция в Python.
Функция enumerate() в Python имеет дополнительный аргумент, который программисты могут использовать для управления начальным значением счетчика. По умолчанию начальное значение равно нулю. Это связано с тем, что последовательности в Python индексированы, и все они начинаются с 0. Проще говоря, когда вы планируете получить начальный элемент списка, обязательно выбирайте индекс 0.
Практика использования функции enumerate() в Python правильным способом
Программисты могут использовать функцию enumerate() всякий раз, когда им нужно использовать элемент и счетчик в цикле. Стоит помнить, что использование функции enumerate() увеличивает общий счетчик на 1 на каждой итерации. Тем не менее, это не приведет к слишком большой негибкости. На самом деле, вы можете оставаться достаточно гибкими, поскольку счетчик является обычным целым числом Python, которое вы можете использовать не только в своих целях.
Внутренняя работа функции enumerate() в Python
Чтобы получить более четкое представление о том, как на самом деле работает enumerate(), лучше всего будет реализовать имеющуюся у вас версию в Python. В вашей версии enumerate() будет два критических требования. Вот они:
– Принимать в качестве аргументов начальное значение счетчика и итерабельность.
– Отправить кортеж обратно, убедившись, что он содержит текущее значение подсчета вместе с элементом, связанным с итерируемой переменной.
В приведенном выше примере my_enumerate использует 2 аргумента, start и sequence, причем нуль является значением по умолчанию для start. Как следует из определения функции, вы должны использовать n в качестве значения для start при выполнении цикла for для sequence. Для каждого элемента, присутствующего в последовательности, убедитесь, что вы передаете управление в соответствующее место. После этого отправьте текущие значения elem и n обратно. Наконец, увеличьте команду n, чтобы подготовиться к предстоящей итерации.
Если вы хотите выполнять перечисления в Python как опытный программист, знание основ жизненно необходимо. Информация и примеры, приведенные в этой статье, дадут вам четкое представление о том, как правильно перечислять.