Циклы по спискам: руководство для начинающих

Раздел: Основы Python -> Управляющие конструкции

Цикл for по списку: базовый подход

Самый простой и эффективный способ пройти по всем элементам списка в Python - использовать цикл for с прямой итерацией. Переменная цикла поочередно принимает значение каждого элемента.

fruits = ["яблоко", "банан", "вишня"]
for fruit in fruits:
    print(fruit)

оператор case в python (оператор case (match) в python)

яблоко
банан
вишня

Match case python (конструкция match-case в python)

Цикл завершается после обработки последнего элемента. Ошибка возникает, если внутри цикла удалять или добавлять элементы. Тогда некоторые элементы могут быть пропущены. Решение - итерироваться по копии списка (fruits[:]).

Типичная проблема:

my_list = [1, 2, 3, 4]
for x in my_list:
    if x == 2:
        my_list.remove(x)
print(my_list)  # [1, 3, 4] - элемент 3 тоже пропущен

операторы ветвления в языке python (условные операторы в python)

Решение: создавать копию списка для итерации.

Как получить индекс элемента при обходе списка?

Функция enumerate возвращает пары (индекс, значение). Это удобно, когда требуется знать позицию элемента.

colors = ["красный", "зеленый", "синий"]
for idx, color in enumerate(colors):
    print(f"{idx}: {color}")

Return s s python (оператор return в python)

0: красный
1: зеленый
2: синий

оператор выбора в python (оператор выбора if в python)

Можно указать начальный индекс через второй аргумент: enumerate(colors, start=1).

Как обойти список в обратном порядке?

Функция reversed возвращает итератор, проходящий элементы от последнего к первому.

for num in reversed([10, 20, 30]):
    print(num)

Python пустая команда (пустая команда pass в python)

30
20
10

как на языке python записывается полное ветвление (полное ветвление в python)

Нельзя изменить исходный список через итератор reversed. Для изменения элементов в обратном порядке используйте for i in range(len(lst)-1, -1, -1).

Как обойти список с изменением его элементов?

Если нужно обновить значения по индексам, удобно использовать range(len(...)).

nums = [1, 2, 3]
for i in range(len(nums)):
    nums[i] = nums[i] * 2
print(nums)  # [2, 4, 6]

циклы в python примеры (примеры циклов в python)

Альтернатива - список comprehensions: [x*2 for x in nums], но он создает новый список.

Как обойти список с условием выхода досрочно?

Оператор break прерывает цикл, continue переходит к следующей итерации.

for item in [5, 3, 7, 1, 9]:
    if item == 7:
        break
    print(item)

программа с циклом while python (программа с циклом while на python)

5
3

For и while python в чем разница (разница между циклами for и while в python)

Как обойти список, используя цикл while?

Цикл while дает полный контроль над индексом, но требует ручного обновления счетчика.

names = ["Анна", "Борис", "Виктор"]
i = 0
while i < len(names):
    print(names[i])
    i += 1

Python if then else (условный оператор if then else в python)

Ошибка: забыть увеличить индекс приведет к бесконечному циклу. Всегда проверяйте условие и изменение счетчика.

Как обработать элементы списка функцией без создания нового списка?

Функция map применяет функцию к каждому элементу, но возвращает итератор. Для немедленного выполнения оберните в list() или используйте в цикле.

def square(x):
    return x*x

values = [1, 2, 3]
for val in map(square, values):
    print(val)

условный оператор в языке программирования python (условный оператор в python)

1
4
9

Расширенные примеры обхода списков

Обход вложенных списков (матриц)

Для двумерных списков часто используют вложенные циклы. Удобно распаковывать строки прямо в заголовке цикла.

Пример
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
for row in matrix:
    for elem in row:
        print(elem, end=' ')
    print()
1 2 3
4 5 6
7 8 9

Параллельная итерация по нескольким спискам

Функция zip объединяет несколько списков в кортежи. Длина итерации определяется самым коротким списком.

Пример
names = ["Иван", "Мария", "Петр"]
ages = [25, 30, 28]
cities = ["Москва", "СПб", "Казань"]
for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age} лет, {city}")
Иван, 25 лет, Москва
Мария, 30 лет, СПб
Петр, 28 лет, Казань

Обход списка с получением предыдущего и следующего элемента

Можно комбинировать zip с срезами для обхода троек (предыдущий, текущий, следующий).

Пример
data = [10, 20, 30, 40, 50]
for prev, curr, nxt in zip(data, data[1:], data[2:]):
    print(f"{prev} -> {curr} -> {nxt}")
10 -> 20 -> 30
20 -> 30 -> 40
30 -> 40 -> 50

Бесконечный циклический обход списка

Модуль itertools предоставляет cycle для бесконечного повторения элементов. Нужно предусмотреть условие выхода.

Пример
import itertools

cycle_list = ["A", "B", "C"]
counter = 0
for item in itertools.cycle(cycle_list):
    print(item)
    counter += 1
    if counter >= 7:
        break
A
B
C
A
B
C
A

Обход с пропуском первых N элементов

itertools.islice позволяет выбрать срез итератора. Например, пропустить заголовки.

Пример
import itertools

lines = ["дата,значение", "2021,100", "2022,200", "2023,300"]
for line in itertools.islice(lines, 1, None):
    print(line)
2021,100
2022,200
2023,300

Обход списка с выполнением действия только для определенных элементов

Комбинация filter и map или просто if внутри цикла.

Пример
numbers = [-5, 3, -1, 0, 8, -2]
# Печатаем только положительные, увеличенные вдвое
for n in numbers:
    if n > 0:
        print(n * 2, end=' ')
6 16

Обход с сохранением индекса и значения одновременно (enumerate + zip)

Полезно для синхронизации двух списков с индексами.

Пример
list_a = ["a", "b", "c"]
list_b = [1, 2, 3]
for idx, (a, b) in enumerate(zip(list_a, list_b)):
    print(f"{idx}: {a}-{b}")
0: a-1
1: b-2
2: c-3

Цикл по списку в Python - comments

En
Python list цикл (python)