Maison >développement back-end >Tutoriel Python >Comment générer tous les sous-ensembles d'un ensemble à l'aide de « itertools.combinations » de Python ?

Comment générer tous les sous-ensembles d'un ensemble à l'aide de « itertools.combinations » de Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 13:52:12360parcourir

How to Generate All Subsets of a Set Using Python's `itertools.combinations`?

Comment générer tous les sous-ensembles d'un ensemble à l'aide d'itertools.combinations

En Python, le module itertools.combinations fournit une méthode simple et efficace pour générer l’ensemble de puissances d’un ensemble. Voici comment procéder :

from itertools import chain, combinations

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

Par exemple, pour trouver tous les sous-ensembles de l'ensemble {0, 1, 2, 3}, vous utiliserez le code suivant :

>>> list(powerset([0, 1, 2, 3]))
[(), (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)]

Notez que le tuple vide () est inclus dans l'ensemble de puissances, car il représente le sous-ensemble vide.

Si vous préférez ne pas avoir le sous-ensemble vide tuple dans les résultats, vous pouvez modifier la plage dans la boucle des combinaisons comme suit :

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))

Cela exclura le tuple vide des sous-ensembles renvoyés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn