Обход элементов числового списка в Python: практические приёмы

Раздел: Python -> Структуры данных

Итерация по значениям списка чисел

Наиболее эффективный способ перебора элементов списка чисел в Python заключается в использовании цикла for, который напрямую обращается к каждому значению без лишних индексов. Такой подход читаем, быстр и редко приводит к ошибкам.


numbers = [10, 20, 30, 40, 50]
for num in numbers:
    print(num)

значения списка числа python (итерация по значениям списка чисел в python)

10
20
30
40
50

словарь set python (словарь и set в python)

Цель этого варианта: получение каждого элемента последовательно для выполнения операций над его значением. Случаи использования: суммирование, фильтрация, преобразование или вывод данных.

Типичные ошибки

  • Попытка изменить список во время итерации может вызвать пропуск элементов или исключение RuntimeError. Лучше создавать копию (например, for num in numbers[:]).
  • Забывание о том, что переменная цикла существует и после завершения цикла (в Python 3 это не проблема, но может сбивать с толку).

Как организовать перебор по индексам, если нужен доступ к позиции элемента?

Используйте range(len(list)) в сочетании с индексацией. Но помните, что это менее производительно и более громоздко.


for i in range(len(numbers)):
    print(f"Index {i}: {numbers[i]}")

Python dict set (словарь и множество в python)

Index 0: 10
Index 1: 20
Index 2: 30
Index 3: 40
Index 4: 50

типы структур python (типы структур данных в python)

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

Как одновременно получить и индекс, и значение без лишнего кода?

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


for idx, val in enumerate(numbers):
    print(f"{idx}: {val}")

вложенные структуры данных в python (вложенные структуры данных в python)

0: 10
1: 20
2: 30
3: 40
4: 50

кортеж чисел python (кортеж чисел в python)

Проблема: по умолчанию счёт начинается с 0. Для другого старта передайте второй аргумент, например enumerate(numbers, start=1).

Как пройти по нескольким спискам одинаковой длины параллельно?

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


numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
for a, b in zip(numbers1, numbers2):
    print(a + b)

язык программирования python массивы (массивы (списки) в python)

5
7
9

массивы данных python 3 (массивы данных в python)

Цель: параллельная обработка данных из нескольких источников. Ошибка: если списки разной длины, zip остановится на самом коротком; используйте itertools.zip_longest для контроля.

Как создать новый список на основе существующего, не используя цикл явно?

Списковое включение (list comprehension) компактно и быстро применяет выражение к каждому элементу.


squares = [x**2 for x in numbers]
print(squares)

одномерные массивы на языке программирования python (одномерные массивы в python)

[100, 400, 900, 1600, 2500]

последовательности в python и способы их реализации (последовательности в python и способы их реализации)

Цель: генерация нового списка с преобразованием или фильтрацией (добавив if). Важно: не подходит для сложной логики с побочными эффектами.

Как применить функцию к каждому элементу и получить итератор?

Функция map возвращает итератор, который лениво вычисляет результаты. Преимущество в памяти при работе с большими данными.


def double(x):
    return x * 2
doubled = map(double, numbers)
print(list(doubled))

программы с массивами на python (программы с массивами на python)

[20, 40, 60, 80, 100]

Python пар (пары (ключ-значение) в python)

Цель: функциональный стиль, особенно в связке с filter или цепочками преобразований. Ошибка: map возвращает итератор, его можно обойти только один раз; при необходимости сохранить результат преобразуйте в список.

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

Используйте встроенную функцию reversed для получения обратного итератора.


for num in reversed(numbers):
    print(num)

Python разница списков (разница между списками и кортежами в python)

50
40
30
20
10

как сделать массив python (создание массива (списка) в python)

Замечание: reversed возвращает итератор, поэтому для списка это экономит память по сравнению со срезом numbers[::-1], который создаёт копию.

Как получить уникальные значения в порядке их первого появления?

Комбинация цикла с множеством для отслеживания уже встреченных элементов. Альтернатива: использовать dict.fromkeys (сохраняет порядок с Python 3.7+).


nums = [1, 2, 2, 3, 1, 4, 5, 4]
seen = set()
unique = []
for num in nums:
    if num not in seen:
        seen.add(num)
        unique.append(num)
print(unique)

списки в языке python (списки в python)

[1, 2, 3, 4, 5]

Ошибка: если порядок не важен, можно использовать list(set(nums)), но порядок будет случайным.

Заключение: выбор метода итерации зависит от задачи. Для простого перебора значений без индексов оптимален for value in list. При необходимости индекса – enumerate, для параллельной обработки – zip, для создания новых списков – list comprehension, для функциональных цепочек – map и filter.

- Python набор значений (множество (set) значений в python)

Расширенные примеры и нестандартные подходы

Итерация с изменением значений по условию

Пример: заменить все чётные числа на их половину, нечётные оставить без изменений.

Пример

nums = [1, 2, 3, 4, 5, 6]
for i, val in enumerate(nums):
    if val % 2 == 0:
        nums[i] = val // 2
print(nums)
[1, 1, 3, 2, 5, 3]

Обход с помощью while и ручным управлением индексом

Иногда требуется более гибкий контроль, например, пропуск нескольких элементов или изменение индекса внутри цикла.

Пример

nums = [0, 1, 2, 3, 4, 5, 6]
i = 0
while i < len(nums):
    if nums[i] % 2 == 0:
        i += 1  # пропускаем следующий элемент
        continue
    print(nums[i])
    i += 1
1
3
5

Итерация по вложенным спискам чисел (матрица)

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

Пример

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 

Итерация с пропуском первого и последнего элемента

Использование срезов для ограничения итерации.

Пример

nums = [10, 20, 30, 40, 50]
for val in nums[1:-1]:
    print(val)
20
30
40

Использование itertools для сложных комбинаций

Например, циклическая итерация по списку с повторением (cycle) или комбинаторные переборы.

Пример

from itertools import cycle, islice

nums = [1, 2, 3]
# Бесконечный цикл, возьмём первые 7 значений
for val in islice(cycle(nums), 7):
    print(val, end=' ')
1 2 3 1 2 3 1

Итерация по отсортированным значениям без изменения исходного списка

Пример

nums = [5, 1, 9, 3]
for val in sorted(nums):
    print(val, end=' ')
print()
# Исходный список не изменился
print(nums)
1 3 5 9 
[5, 1, 9, 3]

Ленивая итерация с генератором

Генераторы позволяют обрабатывать потоки чисел без загрузки всего списка в память.

Пример

def square_gen(nums):
    for n in nums:
        yield n**2

numbers = [2, 4, 6]
for sq in square_gen(numbers):
    print(sq)
4
16
36

Фильтрация во время итерации с помощью filter

Пример

nums = [15, 22, 30, 41, 52]
def is_adult(age):
    return age >= 18

for adult_age in filter(is_adult, nums):
    print(adult_age)
22
30
41
52

Обработка ошибок при итерации (например, если список содержит нечисловые значения)

Пример

mixed = [10, 'abc', 20, None, 30]
for elem in mixed:
    try:
        result = elem * 2
        print(result)
    except TypeError:
        print(f"Пропущен элемент {elem}")
20
Пропущен элемент abc
40
Пропущен элемент None
60

Итерация по значениям списка чисел в Python - comments

En
значения списка числа python (python)