Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表拆分为X个大小相等的块?_Python_Python 3.x - Fatal编程技术网

Python 将列表拆分为X个大小相等的块?

Python 将列表拆分为X个大小相等的块?,python,python-3.x,Python,Python 3.x,我需要将整数列表拆分为nbChunks块,所有这些块都具有参数(max)中指示的总和 该函数应类似于: def split(list, nbChunks, max): 以及拆分的结果([25,5,10,13,7,30],3,30) 就像[[10,7,13],[30],[25,5]](我不在乎数字的顺序) 我已经尝试过对一个长列表进行排序,但从未得到相同的总数。 如果你有任何想法,请随时告诉我 以下是我目前的版本: def dispatchToServers(liste, nbServers,

我需要将整数列表拆分为
nbChunks
块,所有这些块都具有参数(
max
)中指示的总和

该函数应类似于:

def split(list, nbChunks, max):
以及
拆分的结果([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

这是通过使用
排列
功能查看所有可能的数据排列来实现的

从itertools导入置换
def分割块(数据、nb块、所需最大值):
对于排列排序(数据):
组=[]
组=[]
组总数=0
找到=真
对于订购中的x:
组。追加(x)
组_总计+=x
如果len(group)>nb_块或group_total>desired_max:
发现=错误
打破
elif(组总==所需最大值):
groups.append(组)
组=[]
组总数=0
如果发现:
返回组
一无所获
分割块([25,5,10,13,7,30],3,30)

请在代码中编辑您已经尝试过的内容,即使这是一个糟糕的第一次尝试OK,但代码相当长。您如何处理无法汇总到最大值的块?必须找到一个组合。这与。