Цикл for
Цикл for в языке программирования Python предназначен для перебора элементов структур данных и других составных объектов. Это не цикл со счетчиком, каковым является for во многих других языках.
Что значит перебор элементов? Например, у нас есть список, состоящий из ряда элементов. Сначала берем из него первый элемент, затем второй, потом третий и так далее. С каждым элементом мы выполняем одни и те же действия в теле for . Нам не надо извлекать элементы по их индексам, заботиться, на каком из них список заканчивается, и следующая итерация бессмысленна. Цикл for сам переберет и определит конец.
>>> spisok = [10, 40, 20, 30] >>> for element in spisok: . print(element + 2) . 12 42 22 32
После ключевого слова for используется переменная под именем element . Имя здесь может быть любым. Нередко используют i . На каждой итерации цикла for ей будет присвоен очередной элемент из списка spisok . Так при первой прокрутке цикла идентификатор element связан с числом 10, на второй – с числом 40, и так далее. Когда элементы в spisok заканчиваются, цикл for завершает свою работу.
С английского «for» переводится как «для», «in» как «в». Перевести конструкцию с языка программирования на человеческий можно так: для каждого элемента в списке делать следующее (то, что в теле цикла).
В примере мы увеличивали каждый элемент на 2 и выводили его на экран. При этом сам список конечно же не изменялся:
>>> spisok [10, 40, 20, 30]
Нигде не шла речь о перезаписи его элементов, они просто извлекались и использовались. Однако бывает необходимо изменить сам список, например, изменить значение каждого элемента в нем или только определенных, удовлетворяющих определенному условию. И тут без переменной, обозначающей индекс элемента, случаев не обойтись:
>>> i = 0 >>> for element in spisok: . spisok[i] = element + 2 . i += 1 . >>> spisok [12, 42, 22, 32]
Но если мы вынуждены использовать счетчик, то выгода от использования цикла for не очевидна. Если знать длину списка, то почему бы не воспользоваться while . Длину можно измерить с помощью встроенной в Python функции len() .
>>> i = 0 >>> while i < len(spisok): . spisok[i] = spisok[i] + 2 # или spisok[i] += 2 . i = i + 1 # или i += 1 . >>> spisok [14, 44, 24, 34]
Кроме того, с циклом while мы избавились от переменной element .
Функция range()
Теперь пришло время познакомиться со встроенной в Python функцией range() . «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random . Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.
Однако, в отличие от randrange() , функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция range() производит объекты своего класса – диапазоны:
>>> a = range(-10, 10) >>> a range(-10, 10) >>> type(a)
Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:
>>> a[0] -10 >>> a[5] -5 >>> a[15] 5 >>> a[-1] 9
Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:
>>> a[10] = 100 Traceback (most recent call last): File "", line 1, in TypeError: 'range' object does not support item assignment
Цикл for и range()
Итак, зачем нам понадобилась функций range() в теме про цикл for ? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while , позволяет не следить за тем, достигнут ли конец структуры. Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка.
>>> range(len(spisok)) range(0, 4)
Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range() , и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка.
Теперь «соединим» for и range() :
>>> spisok = [14, 44, 24, 34] >>> for i in range(len(spisok)): . spisok[i] += 2 . >>> spisok [16, 46, 26, 36]
Еще раз обратим внимание, в заголовке цикла for берутся элементы вовсе не списка, а объекта range .
Практическая работа
- Заполните список случайными числами. Используйте в коде цикл for, функции range() и randint() .
- Если объект range (диапазон) передать встроенной в Python функции list() , то она преобразует его к списку. Создайте таким образом список с элементами от 0 до 100 и шагом 17.
- В заданном списке, состоящем из положительных и отрицательных чисел, посчитайте количество отрицательных элементов. Выведите результат на экран.
- Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – [‘yes’, ‘no’, ‘maybe’, ‘ok’, ‘what’], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Использование цикла for для итерации по списку в Python

В этом уроке вы узнаете, как использовать питоновский цикл for для итерации по списку в Python. Мы расскажем только самое главное про for in list (и как этот цикл правильно использовать). Кроме рассмотрения базовой информации о циклах for , мы также расскажем про использование дополнительных функций range() и enumerate() , чтобы сделать for по-настоящему всеядным.
Детям из Мариуполя нужно 120 ноутбуков для обучения — подари старое «железо», пусть оно работает на будущее Украины

Итак, чтобы выполнить итерацию по списку, обычно используется стандартный оператор цикла for следующим образом:
for item in list: # здесь код как обработать элемент
В этом базовом синтаксисе оператора цикла for с переменной item на каждой итерации присваивается отдельный элемент списка. При этом внутри тела цикла вы можете манипулировать каждым элементом списка по отдельности.
Например, ниже определен список городов и используется цикл for для итераций по списку:
Курс DevOps engineer.
DevOps інженери відповідають за автоматизацію процесів розробки, тестування та випуску продукту. Вони знають, як зробити розробку швидкою, ефективною та безпечною.
cities = ['New York', 'Beijing', 'Cairo', 'Mumbai', 'Mexico'] for city in cities: print(city)
Получим такой вывод:
New York Beijing Cairo Mumbai Mexico
В этом примере цикл for присваивает отдельный элемент списка городов переменной city и выводит город (из списка list ) на каждой итерации.
Освоить язык программирования Python вам могут помочь онлайн курсы от наших партнеров Mate Academy и Powercode. Получите качественный уровень знаний от практикующих специалистов.
Использование цикла for в Python для итерации по списку с индексом
Рассмотрим другой вариант — иногда вам может понадобиться получить доступ к индексам элементов внутри цикла. В таких случаях можно использовать функцию enumerate() .
Функция enumerate() возвращает кортеж, содержащий текущий индекс и элемент списка.
Следующий пример определяет список городов и использует цикл for с функцией enumerate() для итерации по списку:
cities = ['New York', 'Beijing', 'Cairo', 'Mumbai', 'Mexico'] for item in enumerate(cities): print(item)
(0, 'New York') (1, 'Beijing') (2, 'Cairo') (3, 'Mumbai') (4, 'Mexico')
Чтобы получить доступ к индексу, вы можете распаковать кортеж внутри оператора цикла for следующим образом:
cities = ['New York', 'Beijing', 'Cairo', 'Mumbai', 'Mexico'] for index, city in enumerate(cities): print(f": ")
Курс Python.
Цю мову програмування використовують від базових концепцій до складних застосувань у сферах штучного інтелекту. Після проходження курсу гарантовано отримай роботу в ІТ.
0: New York 1: Beijing 2: Cairo 3: Mumbai 4: Mexico
Функция enumerate() позволяет указать начальный индекс, который по умолчанию равен нулю.
В следующем примере используется функция enumerate() с индексом, начинающимся с единицы:
cities = ['New York', 'Beijing', 'Cairo', 'Mumbai', 'Mexico'] for index, city in enumerate(cities,1): print(f": ")
1: New York 2: Beijing 3: Cairo 4: Mumbai 5: Mexico
Функция Range в Python
Функция range() выдает последовательность целых чисел на основе аргументов функции. Мы попробуем ее использовать совместно с циклами и списками. В документации она описывается так:
Функция Python range() генерирует неизменяемую последовательность чисел, начиная с заданного начального целого числа и заканчивая конечным целым числом. range() — это встроенная функция, которая возвращает объект range, состоящий из серии целых чисел, которые мы можем итерировать с помощью цикла for.
В Python, используя цикл for с range(), мы можем повторять действие определенное количество раз.
range(stop) range(start, stop[, step])
Аргумент start — это первое значение в диапазоне. Если функция range() вызывается только с одним аргументом, то Python считает, что start = 0 .
Аргумент stop — это верхняя граница диапазона. Важно понимать, что это верхнее значение не включается в диапазон.
В примере ниже у нас есть диапазон, начинающийся со значения по умолчанию 0 и включающий целые числа меньше 5.
Курс Frontend.
Онлайн курс з працевлаштуванням, ставай суперніндзя, який може з нуля створити сайт.
# Пример с одним аргументом for i in range(5): print(i, end=", ") # печатает: 0, 1, 2, 3, 4,
В следующем примере мы задаем start = -1 и снова включаем целые числа меньше 5.
# Пример с двумя аргументами for i in range(-1, 5): print(i, end=", ") # печатает: -1, 0, 1, 2, 3, 4,
Необязательное значение шага управляет приращением между значениями в диапазоне. По умолчанию шаг = 1.
В нашем последнем примере мы используем диапазон целых чисел от -1 до 5 и задаем шаг цикла равным 2.
# Пример с тремя аргументами for i in range(-1, 5, 2): print(i, end=", ") # печатает: -1, 1, 3,
Резюме
Используйте цикл for для итерации по списку. Также используйте цикл for с функцией enumerate() для доступа к индексам. Еще можно перебирать элементы списка, ссылаясь на их индексный номер. Используйте функции range() и len() для создания подходящей итерационной таблицы.
Циклы for проверяют условие перед выполнением блока кода для всех значений в списке, массиве, строке или range() . Можно использовать range() , чтобы упростить написание цикла for . Стоп-значение range() должно быть указано явно, но также можно изменить начальное значение и шаг между целыми числами в range() .
Курс Product Management.
Програма розрахована на тих, хто хоче розпочати свою кар’єру як Product Manager з нуля і тих, хто вже працює в IT і хоче перейти в цю спеціалізацію.
Циклы со списками в Python
В статье про «Операции со списками» мы разобрали, как составить простой список, и научились работать с отдельными его элементами. В этой главе узнаем, как выполнить цикл по всему списку, независимо от его длины, используя всего несколько строк кода. Циклы позволяют выполнять одно и то же действие или набор действий с каждым элементом в списке. В результате вы сможете эффективно работать со списками любой длины, в том числе с тысячами или даже миллионами элементов.
Цикл по всему списку
Часто необходимо просмотреть все записи в списке, выполняя одну и ту же задачу с каждым элементом. Например, в игре вам может потребоваться переместить каждый элемент на экране на одинаковую величину, или в списке чисел вы можете выполнить одну и ту же статистическую операцию для каждого элемента. Или, возможно, нужно отобразить каждый заголовок из списка статей на веб-сайте. Если выполнить одно и то же действие с каждым элементом в списке, можно использовать цикл «for» в Python.
Допустим, у нас есть список имен фокусников, и мы хотим распечатать каждое имя в списке. Мы могли бы сделать это, извлекая каждое имя из списка по отдельности, но такой подход может вызвать несколько проблем. Выводить имена по одному было бы не практично, особенно с длинным списком имен. Кроме того, нам придется менять наш код каждый раз, когда изменяется длина списка. Цикл «for» позволяет избежать этих проблем, позволяя Python самостоятельно решать такую задачу. Давайте использовать цикл for, чтобы распечатать каждое имя в списке магов:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician)
Сначала начинаем с определения списка, как мы это делали вводной статье про списки. Затем мы определяем цикл «for». Эта строка говорит Python вытащить имя из списка и сохранить его в переменной «magician». Затем мы говорим Python вывести имя, которое было только что сохранено в переменной «magician». Затем Python повторяет действие по одному разу для каждого имени в списке. Вывод данных представляет собой простой вывод каждого имени в списке:
alice david carolina
Детальный взгляд на циклы
Концепция использования циклов важна, потому что это один из самых распространенных способов, которыми компьютер автоматизирует повторяющиеся задачи. Например, в простом цикле, который мы использовали в прошлом примере, Python сначала читает первую строку цикла:
for magician in magicians:
Эта строка указывает Python извлечь первое значение из списка и сохранить его в переменной magician. Это первое значение — «alice». Затем Python читает следующую строку:
print(magician)
Python выводит текущее значение, которое является значение «alice». Так как список содержит больше значений, Python возвращается к первой строке цикла:
for magician in magicians:
Python получает следующее значение в списке, «david», и сохраняет это значение в переменной и выполняет строку:
print(magician)
Python снова выводит текущее значение в переменной magician, которое является «david». Python повторяет весь цикл еще раз с последним значением в списке, «carolina». Так как в списке больше нет значений, Python переходит на следующую строку в программе. В этом случае после цикла «for» ничего не приходит, поэтому программа просто завершается.
Когда вы впервые используете циклы, имейте в виду, что набор шагов повторяется один раз для каждого элемента в списке, независимо от того, сколько элементов в списке. Если в вашем списке есть миллион элементов, Python повторяет эти шаги миллион раз — и обычно очень быстро.
Также помните, что при написании собственных циклов «for» вы можете выбрать любое имя для временной переменной, которая содержит каждое значение в списке. Следует знать, что следует выбрать значимое имя, представляющее один элемент из списка. Например, вот хороший способ запустить цикл «for» для списка кошек, списка собак и общего списка элементов:
for cat in cats: for dog in dogs: for item in list_of_items:
Подобное назначение имён могут помочь вам следить за действиями, выполняемыми над каждым элементом в цикле for. Использование имен единственного и множественного числа может помочь вам определить, работает ли раздел кода с одним элементом из списка или со всем списком.
Возможности использования циклов
Вы можете делать что угодно с каждым элементом в цикле for. Давайте переделаем немного предыдущий пример, сделав вывод сообщения каждому из списка, сообщив им, что они выполнили замечательный трюк:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!")
Единственное отличие в этом коде состоит в том, что мы составляем сообщение каждому из списка, начиная с его имени. В первый раз в цикле значение magician = «Aice», поэтому Python запускает первое сообщение с именем ‘Alice’. Затем выводится сообщение начнется с «david», потом сообщение начнется с «Carolina». Выводим сообщение для каждого имени в списке:
Alice, that was a great trick! David, that was a great trick! Carolina, that was a great trick!
Можно написать столько строк кода, сколько захотите в цикле for. Каждая строка с отступом, следующая за строкой «for magician in magicians», рассматривается внутри цикла, и каждая строка с отступом выполняется один раз для каждого значение в списке. Поэтому вы можете выполнять вывод столько, сколько в этом есть необходимости с каждым значением в списке. Давайте добавим вторую строку к нашему сообщению, сообщая каждому имени из списка, что мы с нетерпением ждем его следующего трюка:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!") print("I can't wait to see your next trick, " + magician.title() + ".\n")
Так как мы выделили два операторы вывода данных, каждая строка будет выполнена один раз для каждого имени в списке. Новая строка («\n») во втором операторе вывода данных содержит пустую строку после каждого прохождения цикла. Это создает набор сообщений, которые аккуратно сгруппированы для каждого человека в списке:
Alice, that was a great trick! I can't wait to see your next trick, Alice. David, that was a great trick! I can't wait to see your next trick, David. Carolina, that was a great trick! I can't wait to see your next trick, Carolina.
Можно использовать столько строк, сколько хотите в своих циклах for. На практике бывает полезно выполнять ряд различных операций с каждым элементом в списке, когда вы используете цикл for.
Действия после использования циклов
Что происходит после завершения цикла for? Обычно можно обобщить блок вывода или перейти к другим действиям, которые должна выполнять программа.
Любые строки кода после цикла for, которые не имеют отступов, выполняются один раз без повторения. Давайте напишем благодарность всем в нашем списке, например, поблагодарив их за прекрасное шоу. Чтобы отобразить это групповое сообщение после того, как все отдельные сообщения были выведены, мы помещаем благодарственное сообщение после цикла for без отступа:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!") print("I can't wait to see your next trick, " + magician.title() + ".\n") print("Thank you, everyone. That was a great magic show!")
Первые два оператора печати повторяются один раз для каждого имени в списке, как вы видели ранее. Однако, поскольку строка дальше не имеет отступа, она печатается только один раз:
Alice, that was a great trick! I can't wait to see your next trick, Alice. David, that was a great trick! I can't wait to see your next trick, David. Carolina, that was a great trick! I can't wait to see your next trick, Carolina. Thank you, everyone. That was a great magic show!
Когда обрабатываются данные с помощью цикла for, вы обнаружите, что это хороший способ подвести итог операции, которая была выполнена для всего набора данных. Например, вы можете использовать цикл for для инициализации игры, просматривая список персонажей и отображая каждого персонажа на экране. После этого вы можете написать блок с отступом, который отображает кнопку «Воспроизвести сейчас» после того, как все данные выведены на экран.
Циклы со срезом данных в списке
В статье про дополнительные операции со списками мы узнали, как можно работать со срезами данных. Также следует отметить, что можно производить цикл «for» в срезе списка в случаях, когда необходимо выбрать какие-либо элементы в нём и произвести последующие операции с данными. В следующем примере мы перебираем циклом первых трех игроков и выводим их имена как часть простого списка:
players = ['charles', 'martina', 'michael', 'florence', 'eli'] print("Here are the first three players on my team:") for player in players[:3]: print(player.title())
Вместо того, чтобы просматривать весь список игроков, Python просматривает только первые три имени и выводит их:
Here are the first three players on my team: Charles Martina Michael
Работа с определёнными данными в списках очень необходимо в ряде ситуаций. Например, когда вы создаете игру, можно сохранять окончательный счет игрока в список каждый раз, когда он завершает игру. Затем можно получить три лучших результата игрока, отсортировав список по убыванию и выбрав срез, включающий только первые три результата. Когда вы работаете с данными, вы можете использовать срезы для обработки данных в блоках определенного размера. Или, когда вы создаете веб-приложение, вы можете использовать срезы для отображения информации в серии страниц с соответствующим количеством информации на каждой странице.
Примечание
Основная статья: Циклы со словарями в Python
В этой статье мы детально познакомились с использованием циклов в списках, которые применяются во время программирования игр, приложений и других программ. Далее можно изучить, как применяются циклы со словарями в Python, что также полезно. Если же есть вопросы, комментарии, иные сообщения, то оставляйте их на странице обсуждения.
Другие статьи о Python
Язык программирования Python
- Операции со строкой
- Операции со списками
- Дополнительные операции со списками
- Операции со словарями
- Циклы
- Циклы со списками
- Дополнительные операции со словарями
- Ввод данных
- Условные операторы
- Циклы со словарями
- Функции
- Классы
- Работа с файлами в Python
- Тестирование кода в Python
Итерация по списку в Python по частям
Иногда при работе с Python возникает необходимость обрабатывать данные из списка не по одному элементу, а группами. Например, может потребоваться работать с четырьмя элементами списка одновременно.
Возьмём для примера список целых чисел:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Требуется обработать этот список по четыре элемента за раз. Одним из наиболее простых и интуитивно понятных подходов к этой задаче является использование цикла for и функции range():
for i in range(0, len(numbers), 4): chunk = numbers[i:i+4] print(chunk)
В этом примере каждую итерацию цикла мы берем срез из четырех элементов списка. Третий аргумент функции range() определяет шаг, с которым будет двигаться цикл — в данном случае, 4.
Однако, в Python есть еще более «питоновский» способ решения этой задачи — использование генераторов. Генераторы — это особый тип функций, которые позволяют нам создавать последовательности данных «на лету», без необходимости хранения всей последовательности в памяти.
Вот как можно реализовать нашу задачу с помощью генератора:
def chunks(lst, n): for i in range(0, len(lst), n): yield lst[i:i+n] for chunk in chunks(numbers, 4): print(chunk)
В этом примере мы создаем функцию-генератор chunks(), которая принимает на вход список и размер чанка. Внутри функции мы используем тот же подход с циклом for и функцией range(), но вместо того чтобы сразу обрабатывать данные, мы используем ключевое слово yield, чтобы «выдать» очередной чанк.
Затем мы можем использовать наш генератор в цикле for, как будто это обычный список. Главное преимущество такого подхода в том, что данные обрабатываются «по мере необходимости», что позволяет значительно сэкономить память при работе с большими списками.