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.

Python obtener combinación de palabras continuas

Tengo una lista como esta:

tokens = ["hi", "how", "are", "you"]

Estoy tratando de obtener combinaciones de palabras hasta n=3.
Mi resultado esperado es:

output = [ ["hi"], ["hi", "how" ], ["hi", "how" , "are"], ["how"], ["how", "are"], ["how", "are", "you"], ["are"], ["are", "you"], ["you"]

Mi código:

comb = []
for i in range(3):
    comb += list(itertools.combinations(tokens,i+1))

Pero mi código proporciona combinaciones de todo, no solo las siguientes palabras. ¿Qué está mal aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que genera combinaciones de longitud 1 a 3 utilizando el bucle range(3). Por lo tanto, incluye todas las combinaciones de la lista de tokens de hasta una longitud de 3, en lugar de solo las combinaciones que comienzan con cada token y tienen una longitud máxima de 3.

    Para obtener la salida esperada, puedes modificar el código para iterar a través de cada token y, para cada token, generar combinaciones de longitud 1 a 3 que comiencen con ese token:

    import itertools
    
    tokens = ["hi", "how", "are", "you"]
    
    output = []
    for i, token in enumerate(tokens):
        for j in range(1, 4):
            if i + j > len(tokens):
                break
            output.append(tokens[i:i+j])
    
    print(output)
    

    Este código genera combinaciones de longitud 1 a 3 que comienzan con cada token en la lista de tokens. La declaración if asegura que el bucle no se extienda más allá del final de la lista. Ejecutar este código producirá la salida esperada:

    [['hi'], ['hi', 'how'], ['hi', 'how', 'are'], ['how'], ['how', 'are'], ['how', 'are', 'you'], ['are'], ['are', 'you'], ['you']]
    

Comments are closed.