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.

Optimización: Eliminar la diferencia entre una lista de listas.

Necesito saber si puedo optimizar mi código, porque siento que puedo hacerlo.

Aquí está el contexto:

list1 = [[1,'name1'], [2,'name2'], [3,'name3']]
list2 = [2,3]
for item in list1:
    if item[0] not in list2:
         list1.remove(item)

Para obtener list1, estoy haciendo esto:

list(filter(lambda x: name in x[1].lower(), list_of_items))

Así que me pregunto si realmente es posible optimizar este código.

Actualización:

Como se me pide, no puedo usar directamente list2 en el filtro de lambda porque lo obtengo con:

list2 = set(item[0] for item in list1) - set(object.id for object in list_in_my_bdd)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay optimizaciones potenciales que se pueden realizar en el código.

    1. En lugar de usar el método remove() para modificar list1 durante el bucle, es mejor crear una nueva lista que contenga los elementos deseados. Esto se puede lograr utilizando la comprensión de listas:
    list1 = [item for item in list1 if item[0] in list2]
    

    Esto evita el problema de modificar la lista mientras se itera sobre ella y puede ser más rápido para listas más grandes.

    1. Cuando se utiliza la función filter(), es mejor utilizar una comprensión de listas en lugar de una función lambda. Esto se debe a que las comprensiones de listas suelen ser más rápidas que utilizar funciones lambda con funciones incorporadas como filter().
    list1 = [item for item in list_of_items if name in item[1].lower()]
    
    1. Por último, en lugar de calcular list2 creando dos conjuntos y restándolos, lo cual puede ser lento para listas grandes, simplemente puedes utilizar una comprensión de listas para extraer los valores que necesitas:
    list2 = [item[0] for item in list1]
    

    En general, estos cambios pueden hacer que el código sea más limpio y potencialmente más rápido.

Comments are closed.