def find_the_best_solution(shipping_request, list, current_solution, best_shipping_solution):
if shipping_request == {}:
return current_solution
for item in shipping_request:
for i in range(0,len(list), 1):
length_of_combination = i+1
combinations = itertools.combinations(list, length_of_combination)
for x in combinations:
if sum(x) >= shipping_request[item]:
if sum(x) > shipping_request[item]:
current_solution['wastage'] += (sum(x) - shipping_request[item])
current_solution['number_of_containers'] += length_of_combination
current_solution['distribution'][item] = x
temp_request = shipping_request
del temp_request[item]
temp_list = list
for y in x:
temp_list.remove(y)
solution = find_the_best_solution(temp_request, temp_list, current_solution, best_shipping_solution)
if solution['wastage'] < best_shipping_solution['wastage']:
best_shipping_solution = solution
elif solution['wastage'] == best_shipping_solution['wastage']:
if solution['number_of_containers'] < best_shipping_solution['number_of_containers']:
best_shipping_solution = solution
return best_shipping_solution
这将产生以下错误-“运行时错误:迭代期间字典大小更改”
我做错什么了?我该怎么做呢?在
这与
itertools.combinations
无关,您试图更改正在迭代的数据的结构,这是不允许的:您试图在迭代字典时添加或删除字典中的键。一种解决方法是迭代
for key in list(dictionary)
,它生成字典键的副本列表,因此您仍然可以修改底层字典,但是您可能还需要重新考虑您的一般方法。在导致错误的行包括:
^{pr2}$也许你想做一个浅拷贝,比如
temp_request = dict(shipping_request)
,它生成一个新字典,其中引用了相同的对象。但是,您可能希望import copy; copy.deepcopy
递归地复制字典中的每个对象。在相关问题 更多 >
编程相关推荐