import itertools
l = [3,5,-2,-8,14,2]
p = [ i for i in l if i > 0]
n = [- i for i in l if i < 0]
if not p or not n:
raise
b_max = min(sum(p), sum(n))
p = sorted([i for i in p if i <= b_max])
n = sorted([i for i in n if i <= b_max])
if not p or not n:
raise
def generate_p():
global p
for i in range(1, len(p) + 1):
for seq in itertools.combinations(p, i):
yield sum(seq), seq
def generate_n():
global n
for i in range(1, len(n) + 1):
for seq in itertools.combinations(n, i):
yield sum(seq), seq
c = min(p[0], n[0])
iterator_p = generate_p()
iterator_n = generate_n()
cn = None; cp = None
try:
while True:
while cn != c:
cn, seq_n = next(iterator_n)
if c is None or cn > c:
c = cn
while cp != c:
cp, seq_p = next(iterator_p)
if c is None or cp > c:
c = cp
if cn == cp:
seq = [i for i in seq_p] + [- i for i in seq_n]
print(seq)
c = None
except StopIteration:
pass