Trouver toutes les permutations possibles d'une chaîne donnée en Python
La tâche de générer toutes les permutations possibles d'une chaîne d'entrée donnée a une solution simple en Python. Pour nous lancer dans cette tâche, considérons dans un premier temps la chaîne d'entrée, que nous tenterons de réorganiser. À titre d'illustration, prenons la chaîne 'stack' comme exemple :
<code class="python">x = 'stack'</code>
Notre objectif est de créer des permutations de 'stack' en réorganisant ses caractères.
<code class="python">l=['stack','satck','sackt'.......]</code>
Traditionnellement, un pourrait envisager des approches itératives pour résoudre ce défi, impliquant la sélection aléatoire et la transposition de paires de caractères pour générer de nouvelles permutations. Cependant, nous pouvons simplifier notre tâche en utilisant la méthode permutations() fournie par le module itertools. Comme le suggère sa documentation :
itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.
L'utilisation de cette méthode dans notre scénario nécessite que nous respections les considérations suivantes :
Par conséquent, pour obtenir les permutations souhaitées, nous employons l'approche suivante :
<code class="python">from itertools import permutations perms = [''.join(p) for p in permutations('stack')]</code>
Cette approche donne les permutations suivantes :
['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 nous rencontrons des doublons dans nos permutations, nous pouvons les gérer en restructurant nos données dans un format qui empêche les doublons, comme un ensemble :
<code class="python">perms = [''.join(p) for p in permutations('stacks')] len(perms) # 720 len(set(perms)) # 360</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!