Maison > développement back-end > Tutoriel Python > Comment puis-je générer efficacement tous les sous-ensembles (Powerset) d'un ensemble donné en Python ?

Comment puis-je générer efficacement tous les sous-ensembles (Powerset) d'un ensemble donné en Python ?

Linda Hamilton
Libérer: 2024-12-04 02:15:11
original
620 Les gens l'ont consulté

How Can I Efficiently Generate All Subsets (Powerset) of a Given Set in Python?

Recherche de tous les sous-ensembles d'un ensemble : le Powerset

Étant donné un ensemble d'éléments, trouver tous ses sous-ensembles peut être une tâche de programmation courante . C'est ce qu'on appelle la construction de l'ensemble de puissances de l'ensemble.

Solution utilisant itertools

Le module Python itertools fournit une solution élégante pour calculer l'ensemble de puissances à l'aide de combinaisons :

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))
Copier après la connexion

Comment ça marche

Cette fonction génère tous combinaisons d'éléments dans l'ensemble, d'un ensemble vide à l'ensemble complet. Il y parvient en itérant sur la plage de tailles de sous-ensembles possibles (de 0 au nombre d'éléments dans l'ensemble) et en créant des combinaisons d'éléments pour chaque taille.

Exemple

Par exemple, l'ensemble des puissances de l'ensemble {0, 1, 2, 3} est :

list(powerset("abcd"))
[(), ('a',), ('b',), ('c',), ('d',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b', 'c', 'd')]
Copier après la connexion

Personnalisation

Si vous souhaitez exclure le sous-ensemble vide de l'ensemble de puissances, vous pouvez modifier l'instruction range dans la fonction powerset en range(1 , lentille(s) 1) :

def powerset(iterable):
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal