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