Разделение списка на равные части в Python: подробное руководство
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы разделить список на N приблизительно равных частей, можно сконструировать следующую конструкцию списка:
split = lambda lst, n: [lst[i::n] for i in range(n)]
Для того чтобы использовать функцию split
, примените ее следующим образом:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
print(split(lst, n)) # Результат: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
В итоге мы элегантно формируем подсписки, просто как строительные блоки ЛЕГО.
Точное деление на части
Если точное деление списка на равные части невозможно, наш метод может сформировать подсписки с неодинаковым числом элементов. Для более рационального деления списка следует использоваться вещественное деление и оператор остатка от деления:
split_precise = lambda lst, n: [lst[round(i*len(lst)/n):round((i+1)*len(lst)/n)] for i in range(n)]
Оператор остатка от деления особенно полезен при распределении элементов, так как он позволяет делить список на части равномернее:
split_modulo = lambda lst, n: [lst[i*len(lst)//n + min(i, len(lst) % n):(i+1)*len(lst)//n + min(i+1, len(lst) % n)] for i in range(n)]
Работа с числовыми данными
Если вы также увлечены числами, как Шелдон Купер, то для вас будет полезным NumPy. Функция array_split
помогает организовать элементы и легко обрабатывает несоразмерное разделение:
import numpy as np
def split_numpy(lst, n):
return np.array_split(lst, n)
Демонстрация работы этой функции:
lst = np.arange(1, 10)
n = 3
print(split_numpy(lst, n)) # Результат: [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
Стоя на плечах гигантов
Иногда полезно использовать опыт сообщества, словно взобравшись на плечи виртуальных гигантов как Zero Piraeus, чтобы увидеть больше. Достоверные методы, проверенные временем, часто представляют собой лучшие решения.
Визуализация
Представьте, что вы хотите поделить шоколадку на N частей:
Шоколадная плитка (🍫): [🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫]
Разобъём на 3 куска:
Делим как КитКат:
1-я часть (🍫1️⃣): [🟫🟫🟫🟫]
2-я часть (🍫2️⃣): [🟫🟫🟫🟫]
3-я часть (🍫3️⃣): [🟫🟫🟫🟫]
Равномерное распределение гарантирует каждому человеку равное удовольствие от шоколада.
Преодоление типичных проблем
Когда невозможно что-то разделить
Есть вещи, на которые нелегко поделиться, например, Единое Кольцо из "Властелина Колец". В таких случаях оператор модуля волшебным образом поможет вам, обеспечив более справедливое распределение между всеми.
Соблюдение порядка, как в британской очереди
Важно сохранять исходный порядок элементов, словно он описан в книгах Толкина. Выбранный метод разделения должен уважать порядок больше, чем Голлум уважал Кольцо.
Типичные ошибки: Oопа!
Ошибки округления могут привести к нежданным результатам. Поэтому всегда используйте точное целочисленное деление и тестируйте с учетом крайних случаев, чтобы ваша функция работала столь же точно, как швейцарские часы.
Полезные материалы
- 5. Структуры данных — документация Python 3.5.1 — Официальная документация Python, где рассказывается о работе со списками и структурами данных.
- Как разделить список на равные части? – Stack Overflow — Обсуждение методов деления списка, проверенных сообществом программистов.
- Справочник API — more-itertools 10.2.0 документация — Разделение на части с помощью функции grouper в библиотеке 'more-itertools'.
- numpy.array_split — Руководство NumPy v1.26 — Описание использования функции array_split в NumPy для разделения массивов.
- itertools — функции для создания итераторов для эффективного цикла — документация Python 3.5.1 — Набор инструментов Python для создания эффективных итераторов.