给定表单文件名的排序列表
{artist}-{title}.mp3
我想将文件分发到 255 个 bin(子目录)中,以便每个 bin 包含大约相等数量的文件,并限制艺术家是“原子的”,即没有艺术家应该将曲目分布在一个以上的目录中。结果也应该保持排序(即忽略分箱,我们仍然有相同的列表排序)。
我已经尝试过:我通过这种方法将列表分成 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
然后,如果他们已经有另一首曲目,我会通过将艺术家移到前一个 bin 中来执行并强制执行艺术家是原子的限制。这种方法是次优且损坏的,因为我留下了很多空箱(由于在某些情况下,同一艺术家的许多曲目)