Maison  >  Article  >  développement back-end  >  Comment générer toutes les permutations possibles d'une chaîne donnée en Python à l'aide du module `itertools`, et comment gérer les doublons potentiels ?

Comment générer toutes les permutations possibles d'une chaîne donnée en Python à l'aide du module `itertools`, et comment gérer les doublons potentiels ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 01:04:28761parcourir

How do you generate all possible permutations of a given string in Python using the `itertools` module, and how do you handle potential duplicates?

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 :

  1. Si r est omis ou défini sur Aucun, sa valeur par défaut est la longueur de l'itérable, garantissant la génération de toutes les permutations possibles.
  2. Les permutations sont émises dans l'ordre lexicographique. Ainsi, si l'itérable d'entrée est trié, les tuples de permutation seront produits de manière triée.

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!

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