2017-09-21 4 views
-2

Mit Python, Ich versuche, eine besondere Obermenge der Liste lambdas = [20, 32, 18], so dass der Satz wie folgt erstellen sollte:Wie findet man eine spezielle Obermenge eines Sets als gegeben?

lambdasubs = [20, 32, 18, 20+32, 20+18, 32+18, 20+32+18] which is same as 
lambdasubs = [20, 32, 18, 52, 38, 50, 70] 

Ich weiß, dass ich immer mit beginnen:

lambdasubs = lambdas 

für die zuerst 3 Elemente, und dann?

+2

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

+0

Danke für die Klarstellung. Es ist nützlich. – user8028576

Antwort

1

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] 
+0

Was ist, wenn die Werte in lambdas nicht ganzzahlig sind? – user8028576

+0

Okay, ich habe gerade einen Fehler gemacht. Es funktioniert auch für Schwimmer. Vielen Dank. – user8028576

Verwandte Themen