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: ¿cómo obtener la siguiente secuencia de una lista de listas basado en una condición?

Utilicé un analizador NLP que divide incorrectamente los términos ‘C++’ y ‘C#’ como: C (NN), +(SYM), +(SYM), C (NN), #(SYM).

La lista resultante de la división incorrecta se ve así:

l = [['C', 'NN'], ['+', 'SYM'], ['+', 'SYM'], ['C', 'NN'], ['#', 'NN']]

Me gustaría procesar esta lista identificando las cadenas en el índice 0 de cada lista que sean ‘C’ y las siguientes en la línea ‘++’, ‘++’ o ‘#’. Luego me gustaría concatenar estas cadenas, de modo que ‘C’, ‘+’, ‘+’ se convierta en ‘C++’ simplemente sumándolas. Esto debe ser generalizable, por lo que debería funcionar con listas que contengan palabras diferentes, pero aún así concatenar las cadenas deseadas.

Resultado deseado:

l_desired = [['C++', 'NN'], ['C#', 'NN']]

Puedo identificar los elementos de la lista de forma independiente (índice 0) pero no sé cómo identificar la secuencia deseada. Mi idea era usar la función next(), aunque no sé por dónde empezar.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para identificar la secuencia deseada en la lista, puedes utilizar un bucle for para iterar a través de los elementos de la lista y comprobar si el elemento actual y los dos siguientes coinciden con la secuencia deseada (‘C’, ‘+’, ‘+’) or (‘C’, ‘#’). Si se encuentra una coincidencia, puedes concatenar las cadenas utilizando el operador ‘+’ y añadir la cadena resultante y la parte correspondiente del discurso a una nueva lista. Aquí tienes un ejemplo de implementación:

    l = [['C', 'NN'], ['+', 'SYM'], ['+', 'SYM'], ['C', 'NN'], ['#', 'NN']]
    l_desired = []
    
    for i in range(len(l)):
        if i+2 < len(l) and l[i][0] == 'C' and l[i+1][0] == '+' and l[i+2][0] == '+':
            item_str = l[i][0] + l[i+1][0] + l[i+2][0]
            l_desired.append([item_str, l[i][1]])
        elif i+1 < len(l) and l[i][0] == 'C' and l[i+1][0] == '#':
            item_str = l[i][0] + l[i+1][0]
            l_desired.append([item_str, l[i][1]])
    
    print(l_desired)  # Resultado: [['C++', 'NN'], ['C#', 'NN']]
    

    En esta implementación, utilizamos la función range() para generar una secuencia de índices para iterar a través de la lista. Para cada índice i, comprobamos si el elemento actual y los dos siguientes elementos (si corresponde) coinciden con la secuencia deseada, y concatenamos las cadenas utilizando el operador ‘+’ si se encuentra una coincidencia. Luego añadimos la cadena resultante y la parte correspondiente del discurso a la lista l_desired.

    Ten en cuenta que esta implementación asume que la secuencia deseada siempre aparece en el formato especificado (‘C’, ‘+’, ‘+’) o (‘C’, ‘#’), y que no hay otras ocurrencias de los caracteres ‘C’, ‘+’, o ‘#’ en la lista que no deben concatenarse.

Comments are closed.