Sie itertools.combinations
können alle 1
, 2
... N
Längenkombinationen aus Ihrer ursprünglichen Liste
>>> import itertools
>>> [list(itertools.combinations(lambdas, i)) for i in range(1, len(lambdas)+1)]
[[(20,), (32,), (18,)], [(20, 32), (20, 18), (32, 18)], [(20, 32, 18)]]
Dann können Sie sum
jeder der inneren tuple
machen beliebige Kombinationen hinzuzufügen, die mehr als eine haben Element und glätten diese Liste
>>> list(itertools.chain.from_iterable((sum(j) for j in itertools.combinations(lambdas, i)) for i in range(1, len(lambdas)+1)))
[20, 32, 18, 52, 38, 50, 70]
mehr klar darüber zu sein, was vor sich geht, ist dies entspricht in etwa der folgenden procedur al code
import itertools
lambdas = [20, 32, 18]
values = []
for size in range(1, len(lambdas)+1):
for comb in itertools.combinations(lambdas, size):
values.append(sum(comb))
>>> print(values)
[20, 32, 18, 52, 38, 50, 70]
Das ist keine richtige Teilmenge. Das ist überhaupt keine Untermenge. es ist eine Obermenge, die erzeugt wird, indem jedes nichtleere Element der Potenzmenge summiert wird. – user2357112
Danke für die Klarstellung. Es ist nützlich. – user8028576