2010/10/19 Arnau Sanchez <[email protected]>: > On Tue, 19 Oct 2010 13:50:37 +0200 tny wrote: > >> uno_de_cada_en_orden_original = [a[i] for i in range(len(a)) if a[i] not >> in a[:i]] > > Uf, eso tiene pinta de O(n^2) en tiempo cuando unique puede (debería) ser > O(n).
Un unique sobre una colección ordenada debería ser O(n) porque basta con comparar con el anterior. Si la lista no esta ordenada habría que encontrar si ya hemos leido ese dato antes o no. Si puede hacer esa búsqueda con O(1), seguiría siendo O(n), pero lo más probable es que acabara siendo O(n log n). En su caso tiene pinta de O(n^2) u O(n^2 / 2) si nos ponemos finos, cosa que es mejorable, pero tiene la ventaja de no necesitar otra estructura adicional para hacer ese loopback. Es más lento, pero requiere menos memoria. Resumiendo, me parece ideal para los casos en los que se quiera quitar duplicados de una lista manteniendo el orden (desordenado) original de esta y los requisitos de espacio/memoria sean necesarios. Para el resto de los casos hay soluciones mejores ;-) Un saludo: Javi _______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
