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
Libérer: 2024-10-26 01:04:28
original
780 Les gens l'ont consulté

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

Notre objectif est de créer des permutations de 'stack' en réorganisant ses caractères.

<code class="python">l=['stack','satck','sackt'.......]</code>
Copier après la connexion

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])
Copier après la connexion
Return successive r length permutations of elements in the iterable.
Copier après la connexion

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

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

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

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!