Циклы по спискам: руководство для начинающих
Цикл 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 += 1Python 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