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