197 votes

Comment obtenir tous les sous-ensembles d'un ensemble ? (powerset)

Étant donné un ensemble

{0, 1, 2, 3}

Comment puis-je produire les sous-ensembles :

[set(),
 {0},
 {1},
 {2},
 {3},
 {0, 1},
 {0, 2},
 {0, 3},
 {1, 2},
 {1, 3},
 {2, 3},
 {0, 1, 2},
 {0, 1, 3},
 {0, 2, 3},
 {1, 2, 3},
 {0, 1, 2, 3}]

5voto

Nilesh Das Points 51

Je sais que c'est trop tard.

Il y a déjà beaucoup d'autres solutions mais quand même...

def power_set(lst):
    pw_set = [[]]

    for i in range(0,len(lst)):
        for j in range(0,len(pw_set)):
            ele = pw_set[j].copy()
            ele = ele + [lst[i]]
            pw_set = pw_set + [ele]

    return pw_set

4voto

Gourneau Points 4153

Je voulais simplement fournir la solution la plus compréhensible, la version anti-code-golf.

from itertools import combinations

l = ["x", "y", "z", ]

def powerset(items):
    combo = []
    for r in range(len(items) + 1):
        #use a list to coerce a actual list from the combinations generator
        combo.append(list(combinations(items,r)))
    return combo

l_powerset = powerset(l)

for i, item in enumerate(l_powerset):
    print "All sets of length ", i
    print item

Les résultats

Tous les ensembles de longueur 0

[()]

Tous les ensembles de longueur 1

[('x',), ('y',), ('z',)]

Tous les ensembles de longueur 2

[('x', 'y'), ('x', 'z'), ('y', 'z')]

Tous les ensembles de longueur 3

[('x', 'y', 'z')]

Pour en savoir plus voir les docs itertools ainsi que l'entrée de wikipedia sur ensembles de puissance

4voto

SubSet Points 39

Avec l'ensemble vide, qui fait partie de tous les sous-ensembles, vous pourriez utiliser :

def subsets(iterable):
    for n in range(len(iterable) + 1):
        yield from combinations(iterable, n)

3voto

imanzabet Points 959
from itertools import combinations
def subsets(arr: set) -> list:
   subsets = []
   [subsets.extend(list(combinations(arr,n))) for n in range(len(arr))]
   return subsets 

a = {1,2,3}
print(subsets(a))

Salida:

[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3)]

Pour les sous-ensembles triés, on peut le faire :

# sorted subsets
print(sorted(subsets(a)))

Salida:

[(), (1,), (1, 2), (1, 3), (2,), (2, 3), (3,)]

2voto

CPU 100 Points 2269

Juste une petite mise à jour rapide sur les réglages de puissance !

L'ensemble de puissance d'un ensemble X, est simplement l'ensemble de tous les sous-ensembles de X comprenant l'ensemble vide

Exemple d'ensemble X = (a,b,c)

Ensemble de puissance = { { a , b , c } , { a , b } , { a , c } , { b , c } , { a } , { b } , { c } , { } }

Voici une autre façon de trouver le jeu de puissance :

def power_set(input):
    # returns a list of all subsets of the list a
    if (len(input) == 0):
        return [[]]
    else:
        main_subset = [ ]
        for small_subset in power_set(input[1:]):
            main_subset += [small_subset]
            main_subset += [[input[0]] + small_subset]
        return main_subset

print(power_set([0,1,2,3]))

le plein crédit à source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X