Le problème de la génération de toutes les combinaisons possibles d'éléments dans une liste a déconcerté de nombreux programmeurs. Avec des méthodes comme itertools.combinations(), vous pouvez facilement récupérer des sous-ensembles d'une longueur spécifique. Mais que se passe-t-il si vous souhaitez parcourir toutes les tailles de sous-ensembles possibles, des combinaisons à 1 élément à l'ensemble entier ?
En effet, la représentation binaire d'un entier offre une approche, mais découvrons une méthode plus efficace.
Présentation de la puissante fonction itertools.chain(), qui combine de manière transparente une série d'itérateurs en un seul itérateur étendu. Cela nous permet de générer une chaîne de générateurs qui produisent des sous-ensembles de toutes les longueurs possibles.
Voici une implémentation concise utilisant itertools.chain() et combinaisons() :
from itertools import chain, combinations def all_subsets(ss): return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))
Pas besoin de travailler dur avec une indexation complexe ou un décodage binaire. Invoquez simplement all_subsets() sur votre liste et elle renverra sans effort une chaîne de tuples représentant toutes les combinaisons d'éléments possibles.
Par exemple, considérez la liste [1, 2, 3]. Notre code donne :
() (1,) (2,) (3,) (1, 2) (1, 3) (2, 3) (1, 2, 3)
Couvrant toutes les bases, des sous-ensembles vides à l'ensemble complet, cette approche polyvalente résout avec élégance le problème de l'énumération de toutes les combinaisons possibles des éléments d'une liste.
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!