Maison >développement back-end >Tutoriel Python >Comment puis-je générer toutes les permutations d'une liste en Python ?

Comment puis-je générer toutes les permutations d'une liste en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-22 13:15:12925parcourir

How Can I Generate All Permutations of a List in Python?

Générer toutes les permutations d'une liste

Étant donné une liste d'éléments, la tâche est de générer toutes les permutations possibles des éléments. Les permutations sont différentes combinaisons des éléments de la liste.

Solution de bibliothèque standard

La bibliothèque standard Python fournit la fonction itertools.permutations à cet effet :

import itertools
list(itertools.permutations([1, 2, 3]))

Ce code génère toutes les permutations de la liste [1, 2, 3] et les renvoie sous forme de liste de tuples.

Implémentations alternatives

Voici une implémentation alternative d'une fonction de permutations utilisant la récursion :

def permutations(elements):
    if len(elements) <= 1:
        yield elements
        return
    for perm in permutations(elements[1:]):
        for i in range(len(elements)):
            yield perm[:i] + elements[0:1] + perm[i:]

Cette implémentation construit des permutations en ajoutant de manière itérative le premier élément de la liste à différentes positions dans les permutations du reste éléments.

Une autre approche alternative utilise itertools.product :

def permutations(iterable, r=None):
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    for indices in product(range(n), repeat=r):
        if len(set(indices)) == r:
            yield tuple(pool[i] for i in indices)

Cette implémentation parcourt toutes les combinaisons possibles d'indices de 0 à n-1 (où n est la longueur de la liste) et génère une permutation de chaque combinaison si les indices sont uniques (indiquant que chaque élément de la liste est inclus une fois).

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