07 Июл 2023
2 мин
1004

Итерация по списку в Python по частям

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

Содержание

Иногда при работе с Python возникает необходимость обрабатывать данные из списка не по одному элементу, а группами. Например, может потребоваться работать с четырьмя элементами списка одновременно.

Возьмём для примера список целых чисел:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Требуется обработать этот список по четыре элемента за раз. Одним из наиболее простых и интуитивно понятных подходов к этой задаче является использование цикла for и функции range():

for i in range(0, len(numbers), 4):
    chunk = numbers[i:i+4]
    print(chunk)

В этом примере каждую итерацию цикла мы берем срез из четырех элементов списка. Третий аргумент функции range() определяет шаг, с которым будет двигаться цикл — в данном случае, 4.

Однако, в Python есть еще более «питоновский» способ решения этой задачи — использование генераторов. Генераторы — это особый тип функций, которые позволяют нам создавать последовательности данных «на лету», без необходимости хранения всей последовательности в памяти.

Вот как можно реализовать нашу задачу с помощью генератора:

def chunks(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i:i+n]

for chunk in chunks(numbers, 4):
    print(chunk)

В этом примере мы создаем функцию-генератор chunks(), которая принимает на вход список и размер чанка. Внутри функции мы используем тот же подход с циклом for и функцией range(), но вместо того чтобы сразу обрабатывать данные, мы используем ключевое слово yield, чтобы «выдать» очередной чанк.

Затем мы можем использовать наш генератор в цикле for, как будто это обычный список. Главное преимущество такого подхода в том, что данные обрабатываются «по мере необходимости», что позволяет значительно сэкономить память при работе с большими списками.

Содержание

Добавить комментарий

Определи профессию по рисунку