es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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’]

Tags:  , , , ,

Answer

  1. Avatar for 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:

    def generar_combinaciones(cadena):
        if len(cadena) == 1:
            return [cadena]
    
        combinaciones = []
        for i, char in enumerate(cadena):
            combinaciones.append(char)
            for combo in generar_combinaciones(cadena[i+1:]):
                combinaciones.append(char + combo)
    
        return combinaciones
    

    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.

Comments are closed.