"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se generan todas las permutaciones posibles de una cadena determinada en Python usando el módulo `itertools` y cómo se manejan los posibles duplicados?

¿Cómo se generan todas las permutaciones posibles de una cadena determinada en Python usando el módulo `itertools` y cómo se manejan los posibles duplicados?

Publicado el 2024-11-03
Navegar:856

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

Encontrar todas las permutaciones posibles de una cadena dada en Python

La tarea de generar todas las permutaciones factibles de una cadena de entrada determinada tiene una solución sencilla en pitón. Para embarcarnos en esta tarea, inicialmente consideramos la cadena de entrada, que intentaremos reordenar. A modo de ilustración, tomemos la cadena 'stack' como ejemplo:

x = 'stack'

Nuestro objetivo es crear permutaciones de 'stack' reorganizando sus caracteres.

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

Tradicionalmente, se podrían considerar enfoques iterativos para resolver este desafío, involucrando selección aleatoria y transposición de pares de caracteres para generar nuevas permutaciones. Sin embargo, podemos simplificar nuestra tarea utilizando el método permutations() proporcionado por el módulo itertools. Como sugiere su documentación:

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

Usando este método en nuestro escenario requiere que cumplamos con las siguientes consideraciones:

  1. Si r se omite o se establece en Ninguno, el valor predeterminado es la longitud del iterable, lo que garantiza la generación de todas las permutaciones posibles.
  2. Las permutaciones se emiten en orden lexicográfico. Por lo tanto, si el iterable de entrada está ordenado, las tuplas de permutación se producirán de forma ordenada.

Por lo tanto, para obtener las permutaciones deseadas, empleamos el siguiente enfoque:

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

Este enfoque produce las siguientes permutaciones:

['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 encontramos duplicados en nuestras permutaciones, podemos manejarlos reestructurando nuestros datos en un formato que evite duplicados, como un conjunto:

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

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3