Maison >développement back-end >Tutoriel Python >Comment puis-je générer efficacement tous les sous-ensembles possibles d'une liste de nombres en Python ?

Comment puis-je générer efficacement tous les sous-ensembles possibles d'une liste de nombres en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-05 14:43:47603parcourir

How Can I Efficiently Generate All Possible Subsets of a List of Numbers in Python?

Obtenir toutes les combinaisons possibles à partir d'une liste de nombres

La tâche consiste à obtenir toutes les combinaisons possibles (2 ^ N) des éléments d'une liste , quelle que soit leur longueur.

Brute-Force Approche

Une approche possible consiste à parcourir les entiers décimaux 1 à 32768 et à utiliser leurs représentations binaires comme filtres pour sélectionner les éléments de liste correspondants. Cependant, cette méthode a une complexité temporelle de O(32768), ce qui peut être inefficace pour les grandes listes.

Solution optimisée

Une solution plus efficace consiste à utiliser le bibliothèque itertools. Le code suivant génère toutes les combinaisons possibles des éléments de la liste en Python :

import itertools

stuff = [1, 2, 3]
combinations = list(itertools.chain(*map(lambda x: itertools.combinations(stuff, x), range(0, len(stuff)+1))))

for subset in combinations:
    print(subset)

Ce code génère tous les sous-ensembles de la liste donnée, y compris l'ensemble vide et la liste d'origine elle-même. Pour ce faire, il crée un générateur qui génère toutes les combinaisons possibles pour chaque longueur "L", puis utilise la fonction chain() pour concaténer tous les générateurs en un seul itérable.

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