将列表分成X个均匀大小的块?

时间:2019-11-22 22:16:37

标签: python python-3.x

我需要将整数列表分成nbChunks个大块,这些大块都具有参数(max)中指示的总和。

函数应类似于:

def split(list, nbChunks, max):

split([25,5,10,13,7,30],3,30)

的结果

会像[[10,7,13],[30],[25,5]](我不在乎数字的顺序)。

我已经尝试通过对长列表进行排序来进行尝试,但从未获得相同的总和。 如果您有任何想法,请随时让我知道。

这是我当前的版本:

def dispatchToServers(liste, nbServers, max):
    liste.sort(reverse = True) 
    output = []
    for server in range(nbServers):
        contentOfServer = []
        for element in liste:
            if canAdd(element, contentOfServer,max):
                contentOfServer.append(element)
                liste.remove(element)
        output.append(contentOfServer)
    return output

def canAdd(element, serverContent,max):
    if sum(serverContent, element) > max:
        return False
    else:
        return True

1 个答案:

答案 0 :(得分:1)

这可以通过使用permutations函数查看数据的所有可能排列方式来实现

from itertools import permutations

def split_chunks(data, nb_chunks, desired_max):
    for ordering in permutations(data):
        groups = []
        group = []
        group_total = 0
        found = True
        for x in ordering:
            group.append(x)
            group_total += x
            if len(group) > nb_chunks or group_total > desired_max:
                found = False
                break
            elif(group_total == desired_max):
                groups.append(group)
                group = []
                group_total = 0

        if found:
            return groups

    return None        

split_chunks([25,5,10,13,7,30], 3, 30)