Цикл for в Python: что это такое, как работает, примеры
Debian Linux Python Ubuntu
В программировании цикл For известен, как цикл с известным количеством повторений. Но в Python этот цикл представляет собой более универсальную инструкцию. Это означает, что цикл For используется в те моменты, когда количество итераций известно до входа в цикл, в отличие от цикла While, который основан на условиях.
Облачные серверы от ₽430 / месIntel Xeon Gold 6254 3.1 GHz CPU, SLA 99,9%
Подготовка перед работой
Перед началом работы, необходимо выполнить два шага:
- Установить операционную систему под управлением Ubuntu/Debian/CentOS и произвести первоначальную настройку системы;
- Установить и настроить виртуальную среду на Python.
Цикл For
Конструкция цикла For строится следующим образом:
Рассмотрим пример выполнения цикла внутри командного интерпретатора Python.
Напишем маленький кусок кода, в котором начинается цикл for, за ним присваивается переменная n и в последовательности от 6 до 11 выводятся цифры и с помощью функции print() возвращаем значения в терминал.
Рисунок 1 – Выполнение кода в командном интерпретаторе
В программировании индекс чисел начинается с 0, по этой причине в результате мы видим 5 разных значений, которые находятся в диапазоне от 6 до 11.
Использование range() в цикле for
Одним из встроенных последовательностей является range() для управления тем, сколько раз будет повторяться наш цикл.
У range() есть три параметра:
- Start – является началом последовательности (не обязательный параметр и значение по умолчанию 0)
- Stop – является точкой остановки последовательности (обязательный параметр)
- Step – является шагом последовательности (не обязательный параметр и значение по умолчанию 1).
Рассмотрим код с циклом for, в котором присваиваем переменную n и значение 15 (параметр stop) для range(), чтобы последовательность была в этом диапазоне:
Рисунок 2 – Выполнение кода с использованием параметра stop
Для остановки цикла указали параметр 15, поэтому в результате получили 15 значений от 0 до 14 исключая число 15.
Рассмотрим код с использованием параметров range(start/stop), определим цикл for, присвоим переменную n и укажем значения в виде параметров start и stop.
Рисунок 3 – Результат выполненного кода
Когда мы определили точку start и stop, мы получили результат в диапазоне от 10 до 15, исключая число 15.
Параметр step используется для указывания шага между значениями start и stop. Рассмотрим в следующем коде использование шагов в диапазоне, объявим цикл for и в нём переменную n, присвоим значения параметрам start/step/stop:
Рисунок 4 – Использование параметра step
В результате получаем 5 разных значений в диапазоне 25-50 с использованием значения 5 в качестве шагов.
В качестве параметра step можно указать отрицательное число, как показано в следующем примере. Объявим цикл for и переменную, в параметры range присвоим значения 1000,900,-10. Чтобы итерация выполнялось в обратном порядке:
Рисунок 5 – Результат обратной итерации
Мы рассмотрели программу, где точкой начала является 1000 и с помощью обратной итерации получили значения до 910.
Использование списка в цикле
В циклах можно использовать список в качестве параметров итерации. Вместо range() можно обозначить переменную до цикла for и использовать после in переменную.
Рассмотрим код с переменным list, который принимает несколько слов, далее объявим цикл for с переменным list и пройдёмся по данным из этого списка:
Рисунок 6 – Результат использования списков в виде данных
В этом примере мы рассмотрели вызова данных из списка, обозначенного заранее. Вместо переменно list, мы могли использовать другую переменную, но результат был бы одинаковым.
Поскольку списки и другие типы данных являются итерируемыми, их можно комбинировать с функцией range().
Выберем переменную из примера выше, объявим цикл for с переменной item, в параметрах range() укажем длину списка list. В следующей строке с помощью append в список переменной list добавим слово five:
Рисунок 7 – Вывод списка с добавленным словом six
В этом примере мы добавили 5 слов six равный количеству слов из списка list.
Также цикл for мы можем использовать для создания списка с разных значений. В следующем примере обозначим переменную numbers, в котором объявим список. Добавим цикл for и параметр 25 в функции range(). В следующей строке запишем функцию для инициализации нашего пустого списка со значением n, который будет дополнять список:
Рисунок 8 – Результат дополняющегося списка
В примере мы рассмотрели переменную без списка, дальше добавили цикл, в котором диапазон от 0 до 25 и с помощью append прибавляется +1 значение к 0 и далее.
Этим же способом мы можем перебирать строку с символами.
Объявим переменную word и ей присвоим слово quickly, с помощью цикла for переберём слово:
Рисунок 9 – Перебор строки
В примере выше цикл for перебрал слово quickly и разбил на строки.
В цикле for можно использовать словарь. Как известно в словаре используется ключ, первое слово до двоеточия, за ним следует слово присвоенный к ключу. Чтобы правильно вызвать значение ключа через двоеточия, рассмотрим следующий пример:
Рисунок 10 – Вызов ключевых слов с использованием двоеточия
В приведенном выше примере переменная key использовалась для обозначения ключа, а list_dict[key] – для обозначения значений.
Вложенные циклы For
Вложенный цикл является циклом внутри цикла for и конструкция вложенного цикла выглядит следующим образом:
Программа сначала выполняет первую итерацию исходного цикла, затем переходит во внешний цикл и выполняет все итерации, возвращается в исходный цикл и выполняет следующую итерацию и так до конца пока итерация исходного цикла не завершится. Рассмотрим в следующем примере, объявим переменную num с целочисленными типами данных и let с символами.
В исходном цикле объявим цикл for и переменную num, во внешнем let:
Рисунок 11 – Использование исходного и вложенного цикла
Усложним задачу со списком внутри списка. Попробуем извлечь информацию отдельными строками:
- Объявим переменную list_in_list и добавим внутрь переменной наш список;
- Добавим исходный цикл с переменной list и list_in_list;
- В цикле объявим item внутрь list;
- Вызовем item.
Рисунок 12 – Результат вывода информации из списка
Выводы
В этой инструкции мы рассмотрели цикл for с использованием:
- Последовательности range();
- Списков и словарей;
- Вложенные циклы внутри исходного цикла.
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А +7 (812) 403-06-99 700 300 ООО «ИТГЛОБАЛКОМ ЛАБС» 191028 Санкт-Петербург Литейный пр., д. 26, Лит. А +7 (812) 403-06-99 700 300 ООО «ИТГЛОБАЛКОМ ЛАБС» 700 300
Как работает цикл for в Python
Цикл for в Python используется для повторения оператора или части программы несколько раз. Он часто используется для обхода структур данных, таких как список, кортеж или словарь.
Синтаксис цикла for в Python приведен ниже.
for iterating_var in sequence:
statement(s)
Блок-схема цикла for
Цикл for, использующийся в последовательности
Пример-1: Итерация строки с использованием цикла for.
str = «Python»
for i in str:
print(i)
Выход:
P
y
t
h
o
n
Пример-2: Программа для печати таблицы с заданным числом.
list = [1,2,3,4,5,6,7,8,9,10]
n = 5
for i in list:
c = n*i
print(c)
Выход:
5
10
15
20
25
30
35
40
45
50s
Пример-3: Программа для печати суммы данного списка.
list = [10,30,23,43,65,12]
sum = 0
for i in list:
sum = sum+i
print(«The sum is:»,sum)
Выход:
The sum is: 183
Цикл for с использованием функции range()
Функция range()
Функция range() используется для генерации последовательности чисел. Если мы передадим диапазон(10), он будет генерировать числа от 0 до 9. Синтаксис функции range() приведен ниже.
Синтаксис:
range(start,stop,step size)
- Начало представляет собой начало итерации.
- Остановка означает, что цикл будет повторяться до остановки-1. Диапазон(1,5) будет генерировать числа от 1 до 4 итераций. Это необязательно.
- Размер шага используется для пропуска определенных чисел из итерации. Использовать необязательно. По умолчанию размер шага равен 1, но это необязательно.
Рассмотрим следующие примеры:
Пример-1: Программа для последовательной печати чисел.
for i in range(10):
print(i,end = ' ')
Выход:
0 1 2 3 4 5 6 7 8 9
Пример – 2: Программа для печати таблицы с заданным номером.
n = int(input(«Enter the number «))
for i in range(1,11):
c = n*i
print(n,»*»,i,»=»,c)
Выход:
Enter the number 10
10 * 1 = 10
10 * 2 = 20
10 * 3 = 30
10 * 4 = 40
10 * 5 = 50
10 * 6 = 60
10 * 7 = 70
10 * 8 = 80
10 * 9 = 90
10 * 10 = 100
Пример-3: Программа для печати четного числа, используя размер шага в диапазоне().
n = int(input(«Enter the number «))
for i in range(2,n,2):
print(i)
Выход:
Enter the number 20
2
4
6
8
10
12
14
16
18
Мы также можем использовать функцию range() с последовательностью чисел. Функция len() сочетается с функцией range(), которая выполняет итерацию по последовательности с использованием индексации. Рассмотрим следующий пример.
list = ['Peter','Joseph','Ricky','Devansh']
for i in range(len(list)):
print(«Hello»,list[i])
Выход:
Hello Peter
Hello Joseph
Hello Ricky
Hello Devansh
Вложенный цикл for в Python
Python позволяет нам вкладывать любое количество циклов for внутри цикла for. Внутренний цикл выполняется n раз на каждой итерации внешнего цикла. Синтаксис приведен ниже.
Синтаксис:
for iterating_var1 in sequence: #outer loop
for iterating_var2 in sequence: #inner loop
#block of statements
#Other statements
Пример – 1: Вложенный цикл for.
# User input for number of rows
rows = int(input(«Enter the rows:»))
# Outer loop will print number of rows
for i in range(0,rows+1):
# Inner loop will print number of Astrisk
for j in range(i):
print(«*»,end = '')
print()
Выход:
Enter the rows:5
*
**
***
****
*****
Пример-2: Программа числовой пирамиды.
rows = int(input(«Enter the rows»))
for i in range(0,rows+1):
for j in range(i):
print(i,end = '')
print()
Выход:
1
22
333
4444
55555
Использование оператора else с циклом for
В отличие от других языков, таких как C, C ++ или Java, Python позволяет нам использовать оператор else с циклом for, который может выполняться только тогда, когда все итерации исчерпаны. Здесь мы должны заметить, что если цикл содержит любой из операторов break, тогда оператор else не будет выполнен.
Пример 1:
for i in range(0,5):
print(i)
else:
print(«for loop completely exhausted, since there is no break.»)
Выход:
0
1
2
3
4
for loop completely exhausted, since there is no break.
Цикл for полностью исчерпан, так как нет обрыва.
Пример 2:
Цикл "for" в Python — универсальная управляющая конструкция
Циклы являются мощнейшим инструментом, предоставляемым высокоуровневыми языками программирования. Эти управляющие конструкции позволяют многократно выполнять требуемую последовательность инструкций. Циклы в языке Python представлены двумя основными конструкциями: while и for.
Применение циклов
Концепция циклов — это не просто очередная абстрактная выдумка программистов. Повторяющиеся раз за разом операции окружают нас и в реальной жизни:
???? добавление щепотки приправ в варящийся бульон и помешивание его до тех пор, пока пакетик специй не закончится.???? следование строгому расписанию каждый будний день, пока не наступят долгожданные выходные.???? даже банальная смена времён года.
— всё это циклы, и представить нормальную жизнь без них попросту невозможно.
Впрочем, то же касается и программирования. Представьте, что вам нужно последовательно напечатать числа от 1 до 9999999999. В отсутствии циклов, эту задачу пришлось бы выполнять ручками, что потребовало бы колоссального количества кода и огромных временных затрат:
print(1)
print(2)
print(3)
# …
# 9999999995 строк
# …
print(9999999998)
print(9999999999)
Циклы же позволяют уместить такую многокилометровую запись в изящную и простую для понимания конструкцию, состоящую всего из двух строчек:
for i in range(1, 10000000000):
print(i)
Смысл её крайне прост. В основе цикла for лежат последовательности, и в примере выше это последовательность чисел от 1 до 9999999999. for поэлементно её перебирает и выполняет код, который записан в теле цикла. В частности, для решения данной задачи туда была помещена инструкция, позволяющая выводить значение элемента последовательности на экран.
Итерации
- Итерация (Iteration) — это одно из повторений цикла (один шаг или один «виток» циклического процесса). К примеру цикл из 3-х повторений можно представить как 3 итерации.
- Итерируемый объект (Iterable) — объект, который можно повторять. Проще говоря это объект, который умеет отдавать по одному результату за каждую итерацию.
- Итератор (iterator) — итерируемый объект, в рамках которого реализован метод __next__, позволяющий получать следующий элемент.
???? Чтобы выполнить итерацию, Python делает следующее:
- Вызывает у итерируемого объекта метод iter(), тем самым получая итератор.
- Вызывает метод next(), чтобы получить каждый элемент от итератора.
- Когда метод next возвращает исключение StopIteration, цикл останавливается.
Схема работы цикла «for» в Python
Пример создания итерируемого объекта
Для того чтобы создать собственный класс итерируемого объекта, нужно всего лишь внутри него реализовать два метода: __iter__() и __next__():
- внутри метода __next__ () описывается процедура возврата следующего доступного элемента;
- метод __iter__() возвращает сам объект, что даёт возможность использовать его, например, в циклах с поэлементным перебором.
Создадим простой строковый итератор, который на каждой итерации, при получении следующего элемента (т.е. символа), приводит его к верхнему регистру:
class ToUpperCase:
def __init__(self, string_obj, position=0):
«»»сохраняем строку, полученную из конструктора,
в поле string_obj и задаём начальный индекс»»»
self.string_obj = string_obj
self.position = position
def __iter__(self):
«»» возвращаем сам объект «»»
return self
def __next__(self):
«»» метод возвращает следующий элемент,
но уже приведенный к верхнему регистру «»»
if self.position >= len(self.string_obj):
# исключение StopIteration() сообщает циклу for о завершении
raise StopIteration()
position = self.position
# инкрементируем индекс
self.position += 1
# возвращаем символ в uppercase-e
return self.string_obj[position].upper()
low_python = «python»
high_python = ToUpperCase(low_python)
for ch in high_python:
print(ch, end=»»)
> PYTHON
Синтаксис for
Как было замечено, цикл for python — есть средство для перебора последовательностей. С его помощью можно совершать обход строк, списков, кортежей и описанных выше итерируемых объектов.
https://www.youtube.com/watch?v=yPUA8xBEyzM\u0026pp=ygVZ0KbQuNC60LsgZm9yINCyIFB5dGhvbjog0YfRgtC-INGN0YLQviDRgtCw0LrQvtC1LCDQutCw0Log0YDQsNCx0L7RgtCw0LXRgiwg0L_RgNC40LzQtdGA0Ys%3D
В простейшем случае он выглядит так:
for item in collection:
# do something
Если последовательность collection состоит, скажем, из 10 элементов, for будет поочерёдно обходить их, храня значение текущего элемента в переменной item.
Принцип работы for максимально схож с таковым у циклов foreach, применяемых во многих других высокоуровневых языках.
aliceQuote = «The best way to explain it is to do it.»
# с помощью цикла for посчитаем количество символов (с пробелами) в строке
# зададим счетчик
count = 0
# будем посимвольно обходить весь текст
for letter in aliceQuote:
# на каждой новой итерации:
# в переменной letter будет храниться следующий символ предложения;
# увеличиваем счетчик на 1;
count += 1
print(count)
> 39
range() и enumerate()
Вы уже наверняка запомнили, что for работает с последовательностями. В программировании очень часто приходится повторять какую-то операцию фиксированное количество раз. А где упоминается «количество чего-то», существует и последовательность, числовая.
???? Для того чтобы выполнить какую-либо инструкцию строго определенное число раз, воспользуемся функцией range():
# скажем Миру привет целых пять раз!
for i in range(5):
print(«Hello World!»)
>
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
range() можно представлять, как функцию, что возвращает последовательность чисел, регулируемую количеством переданных в неё аргументов. Их может быть 1, 2 или 3:
- range(stop);
- range(start, stop);
- range(start, stop, step).
Здесь start — это первый элемент последовательности (включительно), stop — последний (не включительно), а step — разность между следующим и предыдущим членами последовательности.
# 0 — начальный элемент по умолчанию
for a in range(3):
print(a)
>
0
1
2
# два аргумента
for b in range(7, 10):
print(b)
>
7
8
9
# три аргумента
for c in range(0, 13, 3):
print(c)
>
0
3
6
9
12
???? Чрезвычайно полезная функция enumerate() определена на множестве итерируемых объектов и служит для создания кортежей на основании каждого из элементов объекта. Кортежи строятся по принципу (индекс элемента, элемент), что бывает крайне удобно, когда помимо самих элементов требуется ещё и их индекс.
# заменим каждый пятый символ предложения, начиная с 0-го, на *
text = «Это не те дроиды, которых вы ищете»
new_text = «»
for char in enumerate(text):
if char[0] % 5 == 0:
new_text += '*'
else:
new_text += char[1]
print(new_text)
> *то н* те *роид*, ко*орых*вы и*ете
break и continue
Два похожих оператора, которые можно встретить и в других языках программирования.
- break — прерывает цикл и выходит из него;
- continue — прерывает текущую итерацию и переходит к следующей.
# break
for num in range(40, 51):
if num == 45:
break
print(num)
>
40
41
42
43
44
Здесь видно, как цикл, дойдя до числа 45 и вернув истину в условном выражении, прерывается и заканчивает свою работу.
# continue
for num in range(40, 51):
if num == 45:
continue
print(num)
>
40
41
42
43
44
46
47
48
49
50
В случае continue происходит похожая ситуация, только прерывается лишь одна итерация, а сам же цикл продолжается.
else
Если два предыдущих оператора можно часто встречать за пределами Python, то else, как составная часть цикла, куда более редкий зверь. Эта часть напрямую связана с оператором break и выполняется лишь тогда, когда выход из цикла был произведен НЕ через break.
group_of_students = [21, 18, 19, 21, 18]
for age in group_of_students:
if age < 18:
break
else:
print('Всё в порядке, они совершеннолетние')
> Всё в порядке, они совершеннолетние
Best practice
Цикл по списку
Перебрать list в цикле не составляет никакого труда, поскольку список — объект итерируемый:
# есть список
entities_of_warp = [«Tzeench», «Slaanesh», «Khorne», «Nurgle»]
# просто берём список, «загружаем» его в цикл и без всякой задней мысли делаем обход
for entity in entities_of_warp:
print(entity)
>
Tzeench
Slaanesh
Khorne
Nurgle
Так как элементами списков могут быть другие итерируемые объекты, то стоит упомянуть и о вложенных циклах. Цикл внутри цикла вполне обыденное явление, и хоть количество уровней вложенности не имеет пределов, злоупотреблять этим не следует. Циклы свыше второго уровня вложенности крайне тяжело воспринимаются и читаются.
strange_phonebook = [
[«Alex», «Andrew», «Aya», «Azazel»],
[«Barry», «Bill», «Brave», «Byanka»],
[«Casey», «Chad», «Claire», «Cuddy»],
[«Dana», «Ditrich», «Dmitry», «Donovan»]
]
# это список списков, где каждый подсписок состоит из строк
# следовательно можно (зачем-то) применить тройной for
# для посимвольного чтения всех имён
# и вывода их в одну строку
for letter in strange_phonebook:
for name in letter:
for character in name:
print(character, end='')
> A l e x A n d r e w A y a A z a z e l B a r …
Цикл по словарю
Чуть более сложный пример связан с итерированием словарей. Обычно, при переборе словаря, нужно получать и ключ и значение. Для этого существует метод .items(), который создает представление в виде кортежа для каждого словарного элемента.
Цикл, в таком случае, будет выглядеть следующим образом:
# создадим словарь
top_10_largest_lakes = {
«Caspian Sea»: «Saline»,
«Superior»: «Freshwater»,
«Victoria»: «Freshwater»,
«Huron»: «Freshwater»,
}
# обойдём его в цикле for и посчитаем количество озер с солёной водой и количество озёр с пресной
salt = 0
fresh = 0
# пара «lake, water», в данном случае, есть распакованный кортеж, где lake — ключ словаря, а water — значение.
# цикл, соответственно, обходит не сам словарь, а его представление в виде пар кортежей
for lake, water in top_10_largest_lakes.items():
if water == 'Freshwater':
fresh += 1
else:
salt += 1
print(«Amount of saline lakes in top10: «, salt)
print(«Amount of freshwater lakes in top10: «, fresh)
> Amount of saline lakes in top10: 1
> Amount of freshwater lakes in top10: 3
Цикл по строке
Строки, по сути своей — весьма простые последовательности, состоящие из символов. Поэтому обходить их в цикле тоже совсем несложно.
word = 'Alabama'
for w in word:
print(w, end=» «)
> A l a b a m a
Как сделать цикл for с шагом
Цикл for с шагом создается при помощи уже известной нам функции range, куда, в качестве третьего по счету аргумента, нужно передать размер шага:
# выведем числа от 100 до 1000 с шагом 150
for nums in range(100, 1000, 150):
print(nums)
>
100
250
400
550
700
850
Обратный цикл for
Если вы еще не убедились в том, что range() полезна, то вот ещё пример: благодаря этой функции можно взять и обойти последовательность в обратном направлении.
# выведем числа от 40 до 50 по убыванию
# для этого установим step -1
for nums in range(50, 39, -1):
print(nums)
>
50
49
48
47
46
45
44
43
42
41
40
for в одну строку
Крутая питоновская фишка, основанная на так называемых list comprehensions или, по-русски, генераторов. Их запись, быть может, несколько сложнее для понимания, зато очевидно короче и, по некоторым данным, она работает заметно быстрее на больших массивах данных.
https://www.youtube.com/watch?v=yPUA8xBEyzM\u0026pp=YAHIAQE%3D
В общем виде генератор выглядит так:
[результирующее выражение | цикл | опциональное условие]
Приведем пример, в котором продублируем каждый символ строки inputString:
# здесь letter * 2 — результирующее выражение; for letter in inputString — цикл, а необязательное условие опущено
double_letter = [letter * 2 for letter in «Banana»]
print(double_letter)
> ['BB', 'aa', 'nn', 'aa', 'nn', 'aa']
Другой пример, но теперь уже с условием:
# создадим список, что будет состоять из четных чисел от нуля до тридцати
# здесь if x % 2 == 0 — необязательное условие
even_nums = [x for x in range(30) if x % 2 == 0]
print(even_nums)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
—
Синтаксис и возможности цикла for Python
Циклы python — for и while представляют собой операторы языка программирования, то есть операторы итерации, которые позволяют повторять код определенное количество раз.
Как уже упоминалось ранее, цикл for в Python является итератором, основанным на цикле. Он проходит по элементам list и tuple, строкам, ключам словаря и другим итерируемым объектам.
В Python цикл начинается с ключевого слова for, за которым следует произвольное имя переменной, которое будет хранить значения следующего объекта последовательности. Общий синтаксис for…in в python выглядит следующим образом:
for in :
else:
Элементы «последовательности» перебираются один за другим «переменной» цикла; если быть точным, переменная указывает на элементы. Для каждого элемента выполняется «действие».
Пример простого цикла for в Python:
Блок else является особенным; в то время как программист, работающий на Perl знаком с ним, это неизвестная конструкция для программистов, которые работают на C и C++. Семантически он работает точно так же, как и в цикле while.
Он будет выполнен только в том случае, если цикл не был «остановлен» оператором break. Таким образом, он будет выполнен только после того, как все элементы последовательности будут пройдены.
Если в программе цикл for должен быть прерван оператором break, цикл будет завершен, и поток программы будет продолжен без выполнения действий из else.
Обычно фразы break в pyton связаны с условными операторами.
Копировать Скопировано Use a different Browseredibles = [«отбивные», «пельмени», «яйца», «орехи»]
for food in edibles:
if food == «пельмени»:
print(«Я не ем пельмени!»)
break
print(«Отлично, вкусные » + food)
else:
print(«Хорошо, что не было пельменей!»)
print(«Ужин окончен.»)
Если мы запустим этот код, получим следующий результат:
Отлично, вкусные отбивные
Я не ем пельмени!
Ужин окончен.
Удалим «пельмени» из нашего списка еды и получим следующее:
Отлично, вкусные отбивные
Отлично, вкусные яйца
Отлично, вкусные орехи
Хорошо, что не было пельменей!
Ужин окончен.
Предположим, нам «пельмени» нам нужно просто пропустить и продолжить прием пищи. Тогда нужно использовать оператор continue, для перехода к следующему элементу.
В следующем маленьком скрипте python мы используем continue, чтобы продолжить, итерацию по списку, когда мы сталкиваемся с пельменями.
Копировать Скопировано Use a different Browseredibles = [«отбивные», «пельмени», «яйца», «орехи»]
for food in edibles:
if food == «пельмени»:
print(«Я не ем пельмени!»)
continue
print(«Отлично, вкусные » + food)
else:
print(«Ненавижу пельмени!»)
print(«Ужин окончен.»)
Результат будет следующим:
Отлично, вкусные отбивные
Я не ем пельмени!
Отлично, вкусные яйца
Отлично, вкусные орехи
Ненавижу пельмени!
Ужин окончен.
Если вам нужно получить доступ к индексам списка, не очевидно как использовать цикл for для этой задачи.
Мы можем получить доступ ко всем элементам, но индекс элемента остается недоступным. Есть способ получить доступ как к индексу элемента, так и к самому элементу.
Для этого используйте функцию range() в сочетании с функцией длины len():
Вы получите следующий вывод:
0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
Примечание. Если вы примените len() к list или tuple, получите соответствующее количество элементов этой последовательности.
Если вы перебираете список, лучше избегать изменения списка в теле цикла. Чтобы наглядно увидеть, что может случиться, посмотрите на следующий пример:
Что выведет print(colours)?
['красный', 'черный', 'белый']
Чтобы избежать этого, лучше всего работать с копией с помощью срезов, как сделано в следующем примере:
В результате вы получите следующее:
['красный', 'черный']
Мы изменили список colours, но данное изменение не повлияло на цикл. Элементы, которые должны быть итерированы, остаются неизменными во выполнения цикла.
Enumerate — встроенная функция Python. Большинство новичков и даже некоторые продвинутые программисты не знают о ней. Она позволяет нам автоматически считать итерации цикла. Вот пример:
Функция enumerate также принимает необязательный аргумент (значение начала отсчета, по умолчанию 0), который делает ее еще более полезной.
Цикл for в Python
Цикл for в Python используется для перебора последовательностей (списков, кортежей, строк) и других итерируемых объектов. Перебор последовательности называется обходом.
Синтаксис цикла
for значение in последовательность: Тело цикла for
Цикл продолжается до тех пор, пока мы не достигнем последнего элемента последовательности. Тело цикла for является отдельным блоком кода и отделяется отступом.
Блок-схема цикла
Пример цикла
# Программа находит сумму элементов последовательности
# Список чисел
numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11]
# Переменная, в которой хранится сумма
sum = 0
# Итерация цикла
for value in numbers:
sum = sum+value
print(«Сумма равна», sum)
Вывод:
Сумма равна 48
Функция range()
С помощью функции range() мы можем сгенерировать последовательность чисел. range(10), к примеру, сгенерирует числа от 0 до 9 (всего 10 чисел).
Мы также можем определить начало, конец и размер шага —range(начало, конец, размер_шага). Если не указать шаг (размер_шага), то по умолчанию он будет равен 1.
Объект range в некотором смысле «ленивый». Когда мы вызываем этот объект, он не генерирует все числа, которые он «содержит». Но это и не итератор — он поддерживает операции in, len и __getitem__.
Эта функция не хранит все значения в памяти — это неэффективно. Для нее важны лишь начало, конец и размер шага — генерация следующего числа происходит на ходу.
Для вывода всех элементов следует воспользоваться функцией list().
Наглядный пример
print(range(10))
print(list(range(10)))
print(list(range(2, 8)))
print(list(range(2, 20, 3)))
Вывод:
range(0, 10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][2, 3, 4, 5, 6, 7]
[2, 5, 8, 11, 14, 17]
Функцию range() можно использовать для перебора последовательности чисел в цикле for. Индексация реализуется при комбинации с функцией len(). Пример:
# Программа для итерации списка с использованием индексации
genre = ['поп', 'рок', 'джаз']
# проходимся по циклу, используя индекс i
for i in range(len(genre)):
print(«Мне нравится», genre[i])
Вывод:
Мне нравится попМне нравится рок
Мне нравится джаз
Цикл for с блоком else
В цикле for может быть дополнительный блок else. Блок else выполняется, если элементы последовательности закончились.
Для остановки цикла for используется ключевое слово break. В этом случае выполнение цикла останавливается.
Следовательно, блок else выполняется только в том случае, если выполнение цикла не было прервано оператором break.
Наглядный пример
digits = [0, 1, 5]
for i in digits:
print(i)
else:
print(«Элементов в списке не осталось.»)
Вывод:
015
Элементов в списке не осталось.
В этом примере цикл for печатает элементы списка до тех пор, пока он не закончится. После завершения цикла выполняется блок else, который печатает сообщение Элементов в списке не осталось.
Оператор for…else можно использовать так: блок else выполнится только в том случае, если не выполнится оператор break.
Пример
# Программа выводит на экран оценку студента
student_name = 'Артем'
marks = {'Роман': 90, 'Максим': 55, 'Артур': 77}
for student in marks:
if student == student_name:
print(marks[student])
break
else:
print('Студент не найден.')
Вывод:
Студент не найден.
Цикл for и функция range в Python
В программирование часто сталкиваются с вопросом перебрать весь список и извлечь из него необходимые данные. Цикл for позволяет перебрать любой итерируемый объект, то есть объект, из которого команда for сможет брать элементы по одному, пока не будет обработан последний элемент, не зависимо от его длины.
1. Цикл for в Python.
У нас есть список и для того, чтобы не обращаться к каждому элементу по отдельности, мы можем воспользоваться циклом for. В следующем примере переберем список с брендами автомобилей.
>>> cars = ['ford', 'opel', 'audi', 'land rover', 'bmw'] >>> for brend in cars: … print(brend) # отступ в 4 пробела …
- ford opel audi land rover
- bmw
Во второй строке кода определяется цикл for. Python берет каждую торговую марку из списка и сохраняет его в переменной brend.
После двоеточия код на следующей строке должен начинается с 4 пробелами. С помощью функции print, название марки выводится в переменной brand.
Затем код повторяется до тех пор, пока не закончатся элементы в списке.
1.2. Аргумент end фунции print.
Функция print выводит свой аргумент, после чего курсор перемещает на следующую строку, но при большом количестве элементов в списке, не всегда это удобно. Можно воспользоваться аргументом end, записав его после переменной.
>>> cars = ['ford', 'opel', 'audi', 'land rover', 'bmw'] >>> for brend in cars: … print(brend, end=' ') # отступ в 4 пробела …
ford opel audi land rover bmw
Аргумент end записывается в виде end=' '. Какое количество пробелов вы укажите, такое и будет после выводится между переменными.
1.3. Действия во время выполнения цикла for.
Во время цикла for помимо вывода элементов, с ними можно выполнять различные действия. К примеру, можно выводить сообщения с каждым проходом цикла, для этого воспользуемся f-строками.
>>> cars = ['ford', 'opel', 'audi', 'land rover', 'bmw'] >>> for brend in cars: … print(f»Автомобили торговой марки {brend.title()} очень надежные») …
- Автомобили торговой марки Ford очень надежные Автомобили торговой марки Opel очень надежные Автомобили торговой марки Audi очень надежные Автомобили торговой марки Land Rover очень надежные
- Автомобили торговой марки Bmw очень надежные
Со строками цикл for работает также как и со списком.
>>> mesage = 'Hello World!' >>> for i in mesage: … print(i * 5, end=' ') …
HHHHH eeeee lllll lllll ooooo WWWWW ooooo rrrrr lllll ddddd !!!!!
1.4. Основные ошибки с циклом for.
В Python связь одной строки кода с предшествующей строкой обозначается отступами. В больших программах встречаются блоки кода с отступами в несколько разных уровней. Благодаря отступам, сильно упрощается чтение кода. Основные ошибки как раз и складываются из ошибок в пропущенных или лишних отступах.
>>> mesage = 'Hello World!' >>> for i in mesage: … print(i * 5, end=' ') # нет отступа в 4 пробела File «», line 2 print(i * 5, end=' ') ^
IndentationError: expected an indented block
Для устранения этой ошибки, достаточно поставить в следующей строке после команды for 4 пробела. В основном, если вы работаете в любом современном текстовом редакторе, то после двоеточия он сам поставит отступы на следующей строке.
- Лишний отступ.
- Пропущенное двоеточие.
2. 1. Встроенная функция range.
Встроенная функция range() используется для построения числовых последовательностей. В примере используем команду for и функцию range для выполнения ровно 10 итераций с выводом значения от 0 до 10.
>>> for x in range(10): … print(x, end=' ') …
0 1 2 3 4 5 6 7 8 9
При передаче только одного аргумента, последовательность будет начинаться с 0 и до значения аргумента (10), не включая его. Одна из самых распространённых ошибок, это когда разработчик предполагает, что значение аргумента функции range включается в сгенерированную последовательность.
Приведем пример с двумя аргументами. Выведем последовательность от 20 до 30.
>>> for x in range(20, 30): … print(x, end=' ') …
20 21 22 23 24 25 26 27 28 29
2.2. Создание числового списка с помощью функции range.
- С помощью функции range удобно строить числовые списки.
>>> numbers = list(range(5, 25)) >>> print(numbers)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
- Функция range может создавать последовательности, пропуская числа в заданном диапазоне. Например, приведем пример построения списка от 0 до 100, с шагом 15.
>>> numbers = list(range(0, 100, 15)) >>> print(numbers)
[0, 15, 30, 45, 60, 75, 90]
- С помощью цикла for и функции range можно создавать практически любой числовой список. К примеру, создадим список квадратов всех числе от 1 до 10. Операция возведения в степень обозначается двумя звездочками (**).
>>> a = [] >>> for i in range(1, 11): … a.append(i**2) … >>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
На каждом цикле переменная возводится в квадрат и добавляется в список.
2.4. Перебор списка по индексам с помощью функции range
С помощью цикла for и функции range список можно перебирать по индексам и с каждым значением в списки, производить любые операции. Приведем пример, перебора списка по индексам, с помощью функции range и функции len, которая определяет длину списка.
>>> list_1 = [1, 3, 5, 10, 12, 20] >>> for index in range(len(list_1)): … list_1[index] += 100 …
>>> print(list_1)
[101, 103, 105, 110, 112, 120]
В начале определим длину списка с помощью функции len. Затем это значение передается функции range. В нашем примере длина списка равна 6. С каждым проходом цикла for, index принимает значения от 0 до 6 (не включая 6).
В теле цикла мы вызываем список list_1 и обращаемся к элементам списка по индексам, равные значению переменной index. Каждое значение индекса мы увеличивает на 100.
Затем с помощью функции print выводим список на экран и видим что все значения увеличены на 100.
С помощью индексов и функции range мы можем объединять информацию из разных списков. В примере ниже мы имеем список с именами, а второй список с фамилиями. Выведем на экран имя и фамилию:
>>> list_4 = ['Artem', 'Serg', 'Georgy', 'Petr'] >>> list_5 = ['Ivanov', 'Petrov', 'Sidorov', 'Ulyanov']
>>> for index in range(len(list_4)):
… print(list_4[index], list_5[index]) …
- Artem Ivanov Serg Petrov Georgy Sidorov
- Petr Ulyanov
В результате получили общие данные на экране.
Аналогично можно создавать новые списки из двух или трех списков. Приведем пример перемножения трех списков:
>>> list_1 = [1, 3, 5, 10, 12, 20] >>> list_2 = [20, -9, 42, 10, 755, 12] >>> list_3 = [12, 85, 96, 155, 235, 12] >>> list_new = []
>>> for index in range(len(list_1)):
… list_new.append(list_1[index] * list_2[index] * list_3[index]) … >>> print(list_new)
[240, -2295, 20160, 15500, 2129100, 2880]
В начале мы создадим пустой новый список вне цикла, куда будем добавлять результат с помощью функции append. В результате мы получим новый список с результатом перемножения предыдущих списков по индексам.
Важно помнить, что программа будет работать, если вы уверены, что списки одинаковой длины. Проверить это вы всегда можете с помощью встроенной функции len.
3. Генераторы списков в Python.
Состоящий выше пример построения квадратов чисел в разделе 2.2 состоял из нескольких строк кода. Генератор списка позволяет сгенерировать тот же список, но всего в одной строке.
Определите название списка, после откройте квадратные скобки. Запишите выражение для значений, в нашем случает i ** 2.
Затем напишите цикл for для генерирования чисел, которые будут передаваться выражению и закройте квадратные скобки.
>>> a = [i ** 2 for i in range(1,11)] >>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- В результате получился аналогичный список.
- Далее: Команда if и функция input в Python
- Назад: Сегментация последовательностей в Python