Минимальное значение выведенных словарей

Рейтинг: 0Ответов: 1Опубликовано: 31.07.2023

В задаче необходимо было разделить рандомный числовой ряд (я установил предел до 10 чисел со значениями до 100) на 2 части, таким образом чтобы разность сумм элементов этих частей была минимальна. В результате получил набор словарей, где ключ - кортеж из 2 частей, на который распределяется числовой ряд, и разность этих частей в значении словаря. Необходимо определить и вывести минимальную разность. Я пытаюсь вывести ключ/значение словаря, в котором разность минимальна. Проблема в том что все словари разделены между собой. Возможно ли как-то их объединить, загнать под единый список? Заранее благодарю.

from random import randint
import itertools

mylist_1 = []
for k in range(randint(1, 10)):
    mylist_1.append(randint(1, 100))
print(mylist_1)

sumlist = sum(mylist_1)
half_numb = round(sumlist / 2)
print(half_numb)
print()

myset_1 = set(mylist_1)
for i in range(1, len(mylist_1)):
    for j in itertools.combinations(mylist_1, i):
        if sum(list(j)) in range(half_numb - 15, half_numb + 15):
            myset_2 = set(j)

            myset_3 = myset_1 - myset_2
            mytuple = (tuple(myset_2), tuple(myset_3))
            result = sum(list(myset_2)) - sum(list(myset_3))

            diff = abs(result)
            mydict = {mytuple: diff}
            print(mydict)

Ответы

▲ 1Принят

На сколько я Вас понял, Ваша проблема заключается в том, что вот в этой строке:

mydict = {mytuple: diff}

каждый раз Вы образуете новый словарь, а Вы хотите, чтобы это была единая коллекция. Тогда Вам надо где-то в начале кода определить пустой словарь.

mydict = {}

а строку присвоения переписать:

mydict[mytuple] = diff

Получите единую коллекцию, потом найдете минимум среди значений, если я правильно понял Вашу логику.