我需要将整数列表分成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
答案 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)