Синтаксис и возможности цикла for Python

Циклы python — for и while представляют собой операторы языка программирования, то есть операторы итерации, которые позволяют повторять код определенное количество раз.

Синтаксис цикла For

Как уже упоминалось ранее, цикл for в Python является итератором, основанным на цикле. Он проходит по элементам list и tuple, строкам, ключам словаря и другим итерируемым объектам.

В 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 в pyton связаны с условными операторами.

edibles = ["отбивные", "пельмени", "яйца", "орехи"]

for food in edibles:
    if food == "пельмени":
        print("Я не ем пельмени!")
        break
    print("Отлично, вкусные " + food)
else:
    print("Хорошо, что не было пельменей!")
print("Ужин окончен.")

Если мы запустим этот код, получим следующий результат:

Отлично, вкусные отбивные
Я не ем пельмени!
Ужин окончен.

Удалим «пельмени» из нашего списка еды и получим следующее:

Отлично, вкусные отбивные
Отлично, вкусные яйца
Отлично, вкусные орехи
Хорошо, что не было пельменей!
Ужин окончен.

Оператор пропуска python — continue

Предположим, нам «пельмени» нам нужно просто пропустить и продолжить прием пищи. Тогда нужно использовать оператор continue, для перехода к следующему элементу.

В следующем маленьком скрипте python мы используем 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 персик

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript