Это дает вам разделы элементов, которые составляют до половины суммы всех элементов во входном списке, упорядоченные по убыванию разницы длины между двумя разделами:
import itertools as it
def partitions(lst):
s = sum(lst)
half_s = s // 2
if half_s*2 != s:
raise ValueError(f"Impossible to split the sum {s} evenly")
combs_all = (it.combinations(lst, k) for k in range(len(lst)))
combs_poss = (c for ck in combs_all for c in ck if sum(c) == half_s)
combs_res = []
for a,b in it.combinations(combs_poss, 2):
if not set(a).intersection(b):
combs_res.append([a, b])
return sorted(combs_res, key=lambda tc: abs(len(tc[0])-len(tc[1])))
l1 = [1,2,3,6]
l2 = [1,2,2,4,5,6]
l3 = [1,2,1,4,4,5,3,2]
print(partitions(l1))
print(partitions(l2))
print(partitions(l3))
, что приводит к:
[[(6,), (1, 2, 3)]]
[[(1, 4, 5), (2, 2, 6)], [(4, 6), (1, 2, 2, 5)]]
[[(4, 4, 3), (1, 2, 1, 5, 2)]]
Вы можете выбрать понравившийся элемент, например, первый
partitions(l2)[0]