Циклы for в Python: все, что вам нужно знать

Опубликовано: 2022-08-18

В этом руководстве вы узнаете все об использовании циклов for в Python с примерами кода.

В программировании циклы помогают повторять определенный набор операторов. Вы будете использовать циклы for для определенных итераций, когда:

  • вы знаете, что будете работать с последовательностью с конечным числом элементов
  • вы видите количество повторений заранее

В этом руководстве вы узнаете все о работе с циклами for в Python. Вы начнете с изучения синтаксиса и простых итераций с использованием цикла for. Затем вы узнаете об обработке аргументов командной строки, использовании операторов управления циклом и многом другом.

Давайте начнем…

Синтаксис Python для цикла

Синтаксис 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

Перебор массивов с использованием цикла for

Вы можете перебирать массивы, используя циклы и вкладывать циклы.

В приведенном ниже фрагменте кода 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
python-для-цикла-аргументы-командной-строки

Собрав все вместе, файл 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 внутри цикла

Оператор break внутри цикла for

Как и другие языки программирования, 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?

Python для бесконечного цикла

Итак, у вас есть callable-object и sentinel значение. Если возвращаемое значение из вызываемого объекта никогда не равно часовому, то цикл продолжается вечно!

Давайте используем приведенную выше double в качестве вызываемой и установим значение Sentinel равным 0.

Примечание . Укажите имя функции double , а не вызов функции double() .

Поскольку возвращаемое значение функции double всегда равно 2 и никогда не равно 0, у нас получается бесконечный цикл!

️ Попробуйте запустить следующую ячейку кода. Это бесконечный цикл for, и вам придется принудительно остановить программу.

 for _ in iter(double,0): print("Running...")
python-for-loop-infinite

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.