"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-03
Parcourir:555

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 :

x = 'stack'

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

l=['stack','satck','sackt'.......]

Traditionnellement, on pourrait envisager des approches itératives pour résoudre ce défi, impliquant le sélection aléatoire et 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 sa documentation le suggère :

itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.

Utiliser cette méthode dans notre scénario exige que nous adhérions aux considérations suivantes :

  1. Si r est omis ou défini sur Aucun, la longueur par défaut de l'itérable est assurée, 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 :

from itertools import permutations
perms = [''.join(p) for p in permutations('stack')]

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 :

perms = [''.join(p) for p in permutations('stacks')]
len(perms) # 720
len(set(perms)) # 360
len(permanentes) # 720 len(set(perms)) # 360

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3