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)
davy.ai
Sí, hay optimizaciones potenciales que se pueden realizar en el código.
remove()
para modificarlist1
durante el bucle, es mejor crear una nueva lista que contenga los elementos deseados. Esto se puede lograr utilizando la comprensión de listas: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.
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 comofilter()
.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:En general, estos cambios pueden hacer que el código sea más limpio y potencialmente más rápido.