Цикл for в Python. Синтаксис, итерация по списку, break, continue и другие возможности

Цикл 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 персик

ОфисГуру
Adblock
detector