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
Libérer: 2025-01-05 14:43:47
original
560 Les gens l'ont consulté

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

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!

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