Цикл for python и цикл while — операторы программного языка, а именно: операторы итерации, позволяющие повторять код заданное число раз.
Цикл For — синтаксис
Как уже пояснялось, цикл for в Python — итератор, основанный на цикличности. Он действует по элементам tuple и list, словарным ключам и иным итерируемым объектам.
Цикл в Python начинают с ключевого слова for, после которого идет произвольное имя переменной, хранящее значение последующего объекта задаваемой последовательности. Общий синтаксис for…in в python выглядит так:
for <переменная> in <последовательность>: <действие> else: <действие>
Составляющие “последовательности” перечисляются друг за другом “переменной” цикла. Вернее, переменная указывает на такие элементы. Для каждого из них выполняется “действие”.
Простой цикл for в Python на конкретном примере:
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: ... print(x) ... C C++ Perl Python >>>
Блок else особенный. Если программисты, работающий с Perl знакомы с ним, то для тех, кто взаимодействует с C и C++ — это новшество. Семантически он функционирует тождественно циклу while.
Выполняется лишь, когда цикл не “останавливается” оператором break. То есть, он выполняется исключительно после прохождения всеми элементами заданной последовательности.
Оператор прерывания в python — break
Если в программе цикл for необходимо прервать оператором break, он завершится, и программный поток станет продолжаться без активации из else.
Чаще всего фразы break в python связуются с условными операторами.
edibles = ["отбивные", "пельмени","яйца","орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") break print("Отлично, вкусные " + food) else: print("Хорошо, что не было пельменей!") print("Ужин окончен.")
Если запустить данный код, получится нижеследующий итог:
Отлично, вкусные отбивные Я не ем пельмени! Ужин окончен.
Удаляем “пельмени” из имеющегося списка данных и получаем:
Отлично, вкусные отбивные Отлично, вкусные яйца Отлично, вкусные орехи Хорошо, что не было пельменей! Ужин окончен.
Оператор пропуска python — continue
Допустим, антипатия к такой продукции у пользователя не столь велико, чтобы полностью отказаться от ее потребления. В результате продолжается работа цикла с оператором continue
. В последующем скрипте используется оператор continue
, для продолжения итерации по списку при «контакте с пельменями».
edibles = ["отбивные", "пельмени","яйца","орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") continue print("Отлично, вкусные " + food) # здесь может быть код для наслаждения едой:-) else: print("Ненавижу пельмени!") print("Ужин окончен.")
Итог:
Отлично, вкусные отбивные Я не ем пельмени! Отлично, вкусные яйца Отлично, вкусные орехи Ненавижу пельмени! Ужин окончен.
Итерация по спискам с функцией range()
Если требуется получить доступ к индексам списка, не понятно как использовать цикл for в подобных целях. Возможно получение доступа ко всем элементам, но индекс элемента останется недоступным. Однако существует метод получения доступа как к индексу элемента, так и к самому элементу. В этих целях используется функция range()
в сочетании с функцией длины len()
:
fibonacci = [0,1,1,2,3,5,8,13,21] for i in range(len(fibonacci)): print(i,fibonacci[i])
Получаем:
0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21
Внимание! При применении
len()
кlist
илиtuple
, получается соответствующее число элементов заданной последовательности.
Сложности итераций по спискам
При переборе списка рекомендуется избегать динамики списка в теле цикла. Для наглядности можно предложить следующий вариант:
colours = ["красный"] for i in colours: if i == "красный": colours += ["черный"] if i == "черный": colours += ["белый"] print(colours)
Что получится при применении print(colours)
?
['красный', 'черный', 'белый']
Во избежание подобного рекомендуется взаимодействовать с копией посредством срезов, как в приведенном ниже примере:
colours = ["красный"] for i in colours[:]: if i == "красный": colours += ["черный"] if i == "черный": colours += ["белый"] print(colours)
Результат:
['красный', 'черный']
Был изменен список colours
, но такое действие не повлияло на цикл. Данные, которые нуждались в итерировании, остались неизменными во время выполнения цикла.
Enumerate в python 3
Enumerate является встроенной функцией Python. Большая часть новичков, а также некоторые опытные программисты не знают о ее существовании. Она позволяет производить автоматический счет итераций цикла. Например:
for counter, value in enumerate(some_list): print(counter, value)
Функция enumerate
тоже принимает необязательный аргумент (значение начала отсчета, принимается по умолчанию за 0
). Что делает ее еще более эффективной.
my_list = ['яблоко', 'банан', 'вишня', 'персик'] for c, value in enumerate(my_list, 1): print(c, value) # Результат: # 1 яблоко # 2 банан # 3 вишня # 4 персик