← Все вопросы

Как разбить список на куски по N элементов?

Задан 16 месяцев назад941 просмотров3 ответа
17

Есть длинный список, хочу разбить его на части, например по 3 элемента: [1,2,3,4,5,6,7][[1,2,3],[4,5,6],[7]]. Как?

3 ответа

24
✓ Принятый ответ — помог автору

Срезом в цикле/генераторе с шагом n:

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

chunks([1,2,3,4,5,6,7], 3)
# [[1, 2, 3], [4, 5, 6], [7]]

Идея: идём по индексам с шагом n (range(0, len, n)) и на каждом берём срез lst[i:i+n]. Последний кусок получается короче, если не делится нацело — это нормально.

Если работаешь с numpy — там есть np.array_split, но для обычных списков хватает варианта выше.

Denis Fadin чисто и понятно, спасибо · 16 месяцев назад
11

В Python 3.12+ есть itertools.batched(lst, n) — отдаёт кортежами по n штук, прям из коробки.

Дарина Козлова о, не знал про batched, удобно · 15 месяцев назад
4

Можно и через zip, но это для одинаковых кусков и хвост теряется — для общего случая лучше срезы.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект