Maison  >  Article  >  développement back-end  >  Comment puis-je trouver efficacement toutes les permutations d'une chaîne en Python, surtout si je dois éviter les doublons ?

Comment puis-je trouver efficacement toutes les permutations d'une chaîne en Python, surtout si je dois éviter les doublons ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 08:16:031038parcourir

How can I efficiently find all permutations of a string in Python, especially if I need to avoid duplicates?

Trouver toutes les permutations d'une chaîne donnée en Python [Dupliquer]

En Python, trouver toutes les permutations possibles d'une chaîne donnée pose un défi . Une approche implique une itération dans la liste de caractères, en transposant des paires au hasard pour générer de nouvelles chaînes. Cependant, cette approche a ses limites.

Solution optimale utilisant le module itertools

Une solution plus efficace réside dans le module itertools, qui fournit la méthode permutations(). Cette méthode renvoie des permutations successives d'éléments dans un itérable. Si aucun argument n'est spécifié, la méthode génère par défaut toutes les permutations complètes dans l'ordre lexicographique.

<code class="python">import itertools

x = 'stack'
perms = [''.join(p) for p in permutations(x)]</code>

Ce code produira une liste de chaînes contenant toutes les permutations possibles des caractères dans la « pile », comme suit :

perms = ['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck',
         'satkc', 'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka',
         'scatk', 'scakt', 'sckta', 'sckat', 'sktac', 'sktca', 'skatc',
         'skact', 'skcta', 'skcat', 'tsack', 'tsakc', 'tscak', 'tscka',
         'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 'taksc',
         'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas',
         'tksac', 'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck',
         'astkc', 'asctk', 'asckt', 'asktc', 'askct', 'atsck', 'atskc',
         'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 'acskt', 'actsk',
         'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs',
         'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta',
         'cskat', 'ctsak', 'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas',
         'castk', 'caskt', 'catsk', 'catks', 'cakst', 'cakts', 'cksta',
         'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 'kstca',
         'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc',
         'ktacs', 'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs',
         'kacst', 'kacts', 'kcsta', 'kcsat', 'kctsa', 'kctas', 'kcast',
         'kcats']

Si vous rencontrez des doublons, pensez à utiliser un ensemble pour les éliminer :

<code class="python">x = 'stack'
perms = set([''.join(p) for p in permutations(x)])</code>

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