объединение файлов в каталоги примерно одинакового размера

Учитывая отсортированный список имен файлов в форме

{artist}-{title}.mp3

Я хочу распределить файлы по 255 бинам (подкаталогам), чтобы каждый бин содержал примерно одинаковое количество файлов, с ограничением на то, что исполнители являются «атомарными», то есть ни у одного исполнителя не должно быть треков, распределенных по более чем одному каталогу. Результат должен остаться отсортированным (т. Е. Игнорируя биннинг, у нас все тот же порядок в списке).

Что я уже пробовал: я делю список ровно на 255 частей этим методом:

def partition(lst, n):
    q, r = divmod(len(lst), n)
    indices = [q * i + min(i, r) for i in range(n + 1)]
    result = [lst[indices[i]:indices[i + 1]] for i in range(n)]
    assert sum(len(x) for x in result) == len(lst)
    assert len(set(len(x) for x in result)) <= 2
    return result

А затем я проверяю и применяю ограничение, согласно которому артисты являются атомарными, перемещая их в предыдущую корзину, если у них там уже есть другой трек. Этот метод неоптимален и не работает, потому что у меня осталось много пустых корзин (из-за того, что в некоторых случаях у одного исполнителя много треков)

Ответы на вопрос(1)

Ваш ответ на вопрос