Если itemList
и boxList
уже отсортированы, вам не нужно сортировать их снова. Кроме того, поскольку (насколько я понимаю) boxList
- это просто список значений boxDict
, а itemList
- это просто список значений itemDict
, вам не нужно одно или другое из (boxList
и itemList
) или (boxDict
и itemDict
).
Словари в Python по определению не отсортированы и не могут быть отсортированы. Они также не особенно подходят для обратного поиска (извлечения ключа из значения).
Я бы, вероятно, также использовал «оставшийся вес» в качестве переменной для каждой ячейки вместо накопленного веса.
Действительно, лучший способ сделать это, вероятно, состоит в том, чтобы построить class Box()
, потому что ящики должны быть названы и отслеживать элементы, которые они содержат. Этот код даст вам (1) и (4) ваших целей. Для (2) и (3) вы можете создать собственный класс Box()
; для этого вы можете определить пользовательские параметры __lt__
и т. д. Вы также можете использовать словарь, если посмотрите на функцию sorted()
; проблема в том, что вам придется искать ключ словаря, связанный с наименьшим значением.
boxWeight = 50
numBoxes = 5
boxList = [boxWeight for _ in range(0, numBoxes)]
itemList = [1, 10, 5, 25, 8, 74]
print("boxList: {}".format(boxList))
remainingItems = []
itemsRemain = False
for item in sorted(itemList):
boxList = sorted(boxList, reverse = True)
if boxList[0] > item:
boxList[0] -= item
else:
print("item: {}".format(item))
remainingItems.append(item)
print("itemList: {}".format(itemList))
itemList.remove(item)
remainingWeight = (boxWeight * numBoxes) - sum(boxList)
print("remainingWeight: {}".format(remainingWeight))
if remainingItems:
itemsRemain = True