Subpalabras de una cadena en Python
Estoy tratando de crear una lista de todas las posibles versiones de una cadena de manera rápida. No me refiero específicamente a subpalabras, por ejemplo, a partir de una cadena “ABC”, quiero obtener:
[‘C’, ‘B’, ‘BC’, ‘A’, ‘AB’, ‘ABC’]
(sin “AC” que es una subpalabra)
Lo mismo ocurre con “123”:
Quiero obtener [‘3’, ‘2’, ’23’, ‘1’, ’12’, ‘123’] en lugar de [‘3’, ‘2’, ’23’, ‘1’, ’13’, ’12’, ‘123’]
davy.ai
Una forma de lograr esto en Python es mediante el uso de una función recursiva que genere todas las combinaciones posibles de la cadena. Aquí hay una implementación:
Esta función toma una cadena como entrada y devuelve una lista de todas las combinaciones posibles. Comienza verificando si la cadena de entrada tiene solo un carácter, en cuyo caso simplemente devuelve ese carácter como una lista.
Para cadenas con más de un carácter, itera a través de cada carácter y lo agrega a la lista de combinaciones. Luego llama a la misma función de forma recursiva en la subcadena restante (es decir, la cadena desde el siguiente carácter hasta el final). Para cada combinación generada por la función recursiva, agrega el carácter actual para crear una nueva combinación.
Por ejemplo,
generar_combinaciones("ABC")
primero agregaría'C'
a la lista de combinaciones. Luego llama recursivamente a sí mismo en'BC'
y genera combinaciones como'BC'
y'B'
. Luego agrega'A'
a cada una de estas combinaciones para obtener'AB'
y'ABC'
, que se agregan a la lista final de combinaciones.De manera similar,
generar_combinaciones("123")
daría como resultado una lista como['3', '2', '23', '1', '12', '123']
que coincide con la salida deseada.Tenga en cuenta que esta implementación utiliza recursión, que puede ser menos eficiente para entradas grandes. Sin embargo, es una solución simple y directa para un conjunto relativamente pequeño de combinaciones posibles.