Estoy en la recta final de un proyecto en el que he estado trabajando. Todo funciona sin problemas, pero tengo un cuello de botella con el que tengo problemas para trabajar.Python: eliminar muchos elementos de una lista
Tengo una lista de tuplas. La lista varía en longitud, por ejemplo, de 40,000 a 1,000,000 de registros. Ahora tengo un diccionario donde todos y cada uno (valor, clave) es una tupla en la lista.
Por lo tanto, podría tener
myList = [(20000, 11), (16000, 4), (14000, 9)...]
myDict = {11:20000, 9:14000, ...}
Quiero eliminar cada uno (v, k) tupla de la lista.
Actualmente estoy haciendo:
for k, v in myDict.iteritems():
myList.remove((v, k))
Extracción de 838 tuplas de la lista que contiene 20.000 tuplas tarda de 3 - 4 segundos. Lo más probable es que esté eliminando más de 10.000 tuplas de una lista de 1,000,000, así que necesito que sea más rápido.
¿Hay una mejor manera de hacerlo?
Puedo proporcionar el código utilizado para la prueba, además de datos en escabeche de la aplicación real si es necesario.
Wow. Esto trajo mi tiempo de prueba de 3.2 segundos a 0.025 ... Creo que podemos tener un ganador - al menos hasta que Alex Martelli lo haga sonar :) – sberry
Podría vivir siendo el segundo para él :-) – balpha
@ sberry2A: Si eres midiendo 25 ms, el tiempo de pared real podría ser incluso más pequeño que eso; podría ser la resolución del temporizador de su sistema operativo "redondeando" hasta 25 ms. Intente tomar el promedio de 1000 carreras, por ejemplo. –