← Все вопросы
Как разбить список на куски по N элементов?
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, но это для одинаковых кусков и хвост теряется — для общего случая лучше срезы.
Ваш ответ
Войдите, чтобы ответить на вопрос.