Разбиение списка на примерно равные части

Есть список : [zapros1,zapros2,zapros3,zapros4,zapros5,zapros6] кол-во элементов в нем всегда разное.

Из этих запросов нужно сформировать ссылки, например: [example.com/zapros1&zapros2&zapros3,example.com/zapros4&zapros5&zapros6]

Сложность в том что я не могу реализовать цикл чтобы разделить список с запросами на 10 примерно равных частей.

То есть если запросов 254, то должно быть 10 ссылок, в девяти из них 25 запросов, а в последней 29...


Ответы (1 шт):

Автор решения: strawdog

Предположим, есть список lst:

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

тогда:

import numpy as np

sections = 10 # на сколько частей делим
sec_len = len(lst)//sections # вычисляем длину каждой "равной" части (2)

idx = list(range(sec_len, sec_len*(sections+1), sec_len))[:-1] #создаем список
# индексов, по которым нужно разбивать исходный список

print([list(x) for x in np.split(lst, idx)]) # собственно, разбиваем и выводим на печать

[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19, 20, 21, 22, 23, 24]]

иными словами, если

res = np.split(lst, idx)

то в переменной res будет содержаться numpy-массив нужных вам списков Если использовать просто метод np.split(lst, 10), то исходный список все равно будет поделен на 10 примерно равных частей, но размеры этих частей numpy установит сам, оптимизируя их по длине. А этого вам как раз и не нужно.

→ Ссылка