Циклы for в Python: все, что вам нужно знать
Опубликовано: 2022-08-18В этом руководстве вы узнаете все об использовании циклов for в Python с примерами кода.
В программировании циклы помогают повторять определенный набор операторов. Вы будете использовать циклы for для определенных итераций, когда:
- вы знаете, что будете работать с последовательностью с конечным числом элементов
- вы видите количество повторений заранее
В этом руководстве вы узнаете все о работе с циклами for в Python. Вы начнете с изучения синтаксиса и простых итераций с использованием цикла for. Затем вы узнаете об обработке аргументов командной строки, использовании операторов управления циклом и многом другом.
Давайте начнем…
Синтаксис Python для цикла

Общий синтаксис использования цикла for в Python выглядит следующим образом:
for item in iterable: # do something on item statement_1 statement_2 . . . statement_n
В приведенном выше синтаксисе:
- item - переменная цикла.
- iterable обозначает любые итерируемые объекты Python, такие как списки, кортежи и строки.
- оператор_1 - оператор_n обозначают операторы в теле цикла.
Примечание . Не забудьте добавить двоеточие ( :
после имени итерируемого объекта и сделать отступ для всех операторов в теле цикла четырьмя пробелами.
Общие для циклических конструкций в Python

При использовании цикла for :
- Вы можете получить доступ к элементам напрямую, используя синтаксис, описанный в предыдущем разделе.
- Вы можете использовать цикл for в сочетании со встроенными функциями Python, такими как
range()
иenumerate()
.
Мы рассмотрим их в этом разделе.
Использование цикла for для доступа к элементам
Чтобы улучшить читаемость, вы должны выбрать переменную цикла, указывающую, что содержит список. Например, в приведенном ниже примере nums
— это список чисел, которые мы используем num
качестве переменной цикла. Обратите внимание на то, как for num in nums:
интуитивно понятен и легко читается.
nums = [4,5,9,1,3] for num in nums: print(num) # Output 4 5 9 1 3
Добавив еще несколько примеров, вы можете использовать for fruit in fruits:
и for student in students:
при переборе fruits
и списка students
соответственно.
Использование цикла for с функцией range()
Если вы хотите получить доступ к элементу списка через его индекс, вы можете использовать функцию range()
.
В Python
range(start, stop, step)
возвращает объект диапазона, который вы можете пройти циклом, чтобы получить индексы:start
,start + step
и т. д., вплоть доstop
, но не включая ее.
for i in range(len(nums)): print(nums[i]) # Output 4 5 9 1 3
Вы также можете использовать функцию range()
для генерации последовательности чисел для цикла. В приведенном ниже примере мы устанавливаем необязательный параметр step
равным 2. Таким образом, мы получаем числа от 10 до 20, но не включая их, с шагом 2.
for i in range(10,20,2): print(i) # Output 10 12 14 16 18
Использование цикла for с функцией enumerate()
Если вы хотите перебрать итерируемый объект и одновременно получить доступ к элементам и их индексам, вы можете использовать функцию enumerate().
Вот пример.
for idx, num in enumerate(nums): print(f"{idx}:{num}") # Output 0:4 1:5 2:9 3:1 4:3

Как читать элементы из списков, используя цикл for в Python
Чтобы просмотреть списки Python с помощью цикла for, вы можете использовать общий синтаксис из предыдущего раздела.
В приведенном ниже примере nums
является итерируемым, а num — переменной цикла.
nums = [4,5,9,1,3] for num in nums: print(f"{num} times 3 is {num*3}") # action on each num # Output 4 times 3 is 12 5 times 3 is 15 9 times 3 is 27 1 times 3 is 3 3 times 3 is 9
Как перебирать строки с помощью цикла for в Python
Строки Python являются итерируемыми, и вы можете выполнять циклы, индексацию, нарезку и многое другое.
Примечание . Python не имеет встроенного символьного типа данных. Таким образом, вы можете рассматривать символ как строку длины один.
my_string = "Code" for char in my_string: print(char) # Output C o d e
Как перебирать массивы с помощью цикла for в Python

Вы можете перебирать массивы, используя циклы и вкладывать циклы.
В приведенном ниже фрагменте кода array1 — это вложенный список, содержащий в качестве элементов списки меньшего размера. Таким образом, цикл через array1 дает каждую строку, как показано ниже.
array1 = [[2,3],[7,8]] for row in array1: print(row) # Output [2, 3] [7, 8]
Чтобы получить доступ к отдельным элементам в каждой строке, вы можете использовать другой цикл for
.
array1 = [[2,3],[7,8]] for row in array1: for elt in row: print(elt)
В приведенной выше ячейке кода:
- Внешний цикл for помогает вам индексировать строки.
- Внутренний цикл for позволяет вам использовать элементы в каждой строке.
Вот соответствующий вывод.
Output 2 3 7 8
Как читать аргументы командной строки, используя цикл for

Как разработчик, вы должны уметь запускать сценарии Python из командной строки и использовать аргументы командной строки для взаимодействия со своим сценарием.
Вы можете использовать встроенные модули Python, такие как sys и argparse, для разбора и чтения аргументов командной строки.
В этом разделе мы рассмотрим, как использовать модуль sys
и использовать цикл for
для перебора списка аргументов командной строки.
В модуле sys sys.argv
— это список аргументов командной строки, которые вы передаете. Таким образом, вы можете перебирать sys.argv
точно так же, как вы перебираете любой список Python.
# main.py import sys for arg in sys.argv: print(arg)
Теперь вы можете запустить программу из командной строки, как показано ниже.
$ python main.py Hello Python3 main.py Hello Python3
По умолчанию имя модуля является первым аргументом и имеет нулевой индекс в sys.argv
.
Если вы хотите получить доступ к индексам и соответствующим аргументам, вы можете использовать функцию range()
.
# main.py import sys for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
️ Далее повторно запускаем main.py.
$ python main.py Hello Python3 arg0 is main.py arg1 is Hello arg2 is Python3
Предположим, вы хотите проанализировать и обработать аргументы, отличные от имени модуля. Вы можете установить начальное значение равным 1, как в ячейке кода ниже.

# main.py import sys for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
$ python main.py Hello Python3 arg1 is Hello arg2 is Python3

Собрав все вместе, файл main.py содержит следующий код.
# main.py import sys print("\nPrinting all command-line arguments...") for arg in sys.argv: print(arg) print("\nPrinting all command-line arguments with index...") for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}") print("\nPrinting command-line arguments except arg0: module_name...") for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
Вот вывод, когда вы запускаете модуль.
$ python main.py Hello Python3 Printing all command-line arguments... main.py Hello Python3 Printing all command-line arguments with index... arg0 is main.py arg1 is Hello arg2 is Python3 Printing command-line arguments except arg0: module_name... arg1 is Hello arg2 is Python3
Как использовать оператор break внутри цикла

Как и другие языки программирования, Python также поддерживает использование операторов управления циклом break
и continue
. Эти операторы могут помочь изменить поток управления в циклах на основе некоторых условий. Давайте посмотрим, как использовать их внутри цикла for.
Оператор break
можно использовать для выхода из цикла, когда определенное условие имеет значение True
.
Мы хотим написать программу, которая будет делать следующее:
- Fix
k
, количество входов. - Используйте цикл
for
для считывания вводимых пользователем данных — по одной цифре за раз и суммирования неотрицательных чисел (больше или равных нулю). - Этот процесс должен продолжаться до тех пор, пока пользователь вводит неотрицательные числа.
- Когда пользователь вводит отрицательное число, выйдите из цикла и распечатайте сумму.
Вот код, который выполняет указанную выше задачу.
k= 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: break # exit loop when num < 0 sum += num print(sum)
Если пользователь вводит число меньше нуля, элемент управления выходит из цикла for и переходит к первому оператору после цикла.
Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 10
Как использовать оператор continue внутри цикла for
Оператор continue
может использоваться для пропуска определенных итераций в зависимости от конкретного условия.
Давайте воспользуемся теми же примерами из предыдущего раздела.
- Прочитайте пользовательский ввод и вычислите сумму неотрицательных чисел.
- Если пользователь вводит отрицательное число, пропустите эту итерацию, перейдите к следующей итерации и прочитайте следующее число.
k = 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: continue sum += num print(sum)
Вот пример вывода.
Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 Enter a number: 3 13
Четвертое число -1, отрицательное. Однако на этот раз цикл for продолжается до тех пор, пока мы не достигнем указанного количества входных данных, и игнорирует отрицательные входные данные. По сути, он возвращает сумму всех неотрицательных чисел из k входных чисел.
Можете ли вы столкнуться с бесконечным циклом for в Python?

Во всех примерах и вариантах использования, которые мы обсуждали до сих пор, мы никогда не сталкивались с проблемой бесконечного цикла for. Но можем ли мы иметь бесконечный цикл for в Python?
Рассмотрим следующую функцию double()
.
def double(x = 1): return x*2
- Когда вы вызываете функцию
double()
без указания значенияx
, используется значение по умолчанию 1. - Когда вы указываете значение
x
в вызове функции, используется это значение.
double() # Returns: 2 double(20) # Returns: 40
В Python функция iter() возвращает объект итератора. Вы можете использовать next(iter-obj)
для повторения последовательности и доступа к последующим элементам.
– Рассмотрим вызываемый объект и значение sentinel .
-
iter(callable-object, sentinel)
может использоваться для выполнения итерации до тех пор, пока возвращаемое значение изcallable-object
не станет равнымsentinel
.
Вы понимаете, почему в этом случае у нас может быть бесконечный цикл for?

Итак, у вас есть callable-object
и sentinel
значение. Если возвращаемое значение из вызываемого объекта никогда не равно часовому, то цикл продолжается вечно!
Давайте используем приведенную выше double
в качестве вызываемой и установим значение Sentinel равным 0.
Примечание . Укажите имя функции double
, а не вызов функции double()
.
Поскольку возвращаемое значение функции double
всегда равно 2 и никогда не равно 0, у нас получается бесконечный цикл!
️ Попробуйте запустить следующую ячейку кода. Это бесконечный цикл for, и вам придется принудительно остановить программу.
for _ in iter(double,0): print("Running...")

Python для циклов: практические вопросы
# 1 . Используйте цикл for для вывода всех четных чисел в диапазоне от 0 до 20.
Подсказка : используйте функцию range()
с правильным значением step
.
# 2 . Выведите все четные числа от 20 до 0.
Подсказка : используйте отрицательное значение для параметра step
в функции range()
.
# 3 . Создайте трехмерный массив NumPy.
Подсказка : используйте цикл for и вложенные циклы for по мере необходимости для доступа к строкам и отдельным записям в массиве.
Подведение итогов
Вот краткое изложение того, что вы узнали в этом уроке.
- Синтаксис для использования цикла for Python вместе с функциями range() и enumerate()
- Использование циклов for для перебора списков, массивов и строк и чтения аргументов командной строки
- Использование операторов управления циклом: break для выхода из цикла и continue для пропуска определенных итераций — в зависимости от условий — внутри циклов for
- Понимание возможности бесконечных циклов for в Python
Затем узнайте, как использовать метод split() в Python.