how comprehension code accelerate python performance list

comprehension - La forma más rápida de uniqificar una lista en Python



how to accelerate python code (5)

¿La forma más rápida de unificar una lista en Python sin conservar el orden? Vi muchas soluciones complicadas en Internet, ¿podrían ser más rápidas que simplemente:

list(set([a,b,c,a]))


Echa un vistazo a esta publicación con muchos resultados diferentes. Lo que propusiste anteriormente parece ser uno de los más rápidos (y los más simples)


Esta publicación actualizada de Peter Bengtsson sugiere que dos de las formas más rápidas de hacer una lista de elementos únicos en Python 3.6+ son:

# Unordered (hashable items) list(set(seq)) # Order preserving list(dict.fromkeys(seq))


Ir a un conjunto solo funciona para listas de tal manera que todos sus elementos sean hashable , por ejemplo, en su ejemplo si c = [] , el código que proporcione generará una excepción. Para los elementos no hashables, pero comparables, ordenar la lista, luego usar itertools.groupby para extraer los elementos únicos de ella, es la mejor solución disponible (O (N log N)). Si los elementos no son todos los hashables, ni todos son comparables, su única solución de "última zanja" es O(N squared) .

Puede codificar una función para "unificar" cualquier lista que use el mejor enfoque disponible probando cada enfoque en orden, con un try / except alrededor del primero y segundo (y una return del resultado al final de la cláusula de try , o, elegantemente, en una cláusula else de la sentencia try ;-).


Tim Peters escribió una receta clásica de libro de cocina general para este problema en 2001 (antes de que se introdujeran los juegos). Los comentarios de Alex Martelli, Raymond Hettinger y otros son informativos e incluyen actualizaciones para usar conjuntos, etc.


set([a, b, c, a])

Déjalo en esa forma si es posible.