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 ?
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!