Maison > développement back-end > Tutoriel Python > Comment puis-je générer des permutations en Python ?

Comment puis-je générer des permutations en Python ?

Linda Hamilton
Libérer: 2024-12-24 04:58:31
original
919 Les gens l'ont consulté

How Can I Generate Permutations in Python?

Génération de permutations à l'aide des bibliothèques Python

Pour générer toutes les permutations d'une liste en Python, une approche pratique consiste à utiliser la fonction itertools.permutations de la bibliothèque standard. Par exemple :

import itertools
list(itertools.permutations([1, 2, 3]))
Copier après la connexion

Implémentation personnalisée des permutations

Vous pouvez également créer une implémentation personnalisée pour calculer les permutations :

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

Autres approches

Si vous préférez, vous pouvez également explorer les suivantes approches :

# Using reversed indices
def permutations(iterable, r=None):
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    if r > n:
        return
    indices = range(n)
    cycles = range(n, n-r, -1)
    yield tuple(pool[i] for i in indices[:r])
    while n:
        for i in reversed(range(r)):
            cycles[i] -= 1
            if cycles[i] == 0:
                indices[i:] = indices[i+1:] + indices[i:i+1]
                cycles[i] = n - i
            else:
                j = cycles[i]
                indices[i], indices[-j] = indices[-j], indices[i]
                yield tuple(pool[i] for i in indices[:r])
                break
        else:
            return

# Using 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)
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!

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