Иногда при работе с 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, как будто это обычный список. Главное преимущество такого подхода в том, что данные обрабатываются «по мере необходимости», что позволяет значительно сэкономить память при работе с большими списками.
Добавить комментарий