2010-03-26 15 views
21

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

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

¿Por qué no compararlos y descubrirlos? –

+9

Dispara, si necesitas algo único, ¿por qué molestarse en volver atrás de un conjunto? –

+0

2Chris: Entonces, los puntos de referencia están ... 2Mike: Porque list -> list –

Respuesta

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

Déjelo en esa forma si es posible.

+3

Puede iterar sobre conjuntos y probar la pertenencia a conjuntos, por lo que no es necesario convertir de nuevo a la lista si no necesita el pedido. –

+0

Es una manera rápida y clara. Gracias. –

+3

Vale la pena señalar que esto supone que todos los elementos de la lista son ** hashable ** (ver el [glosario de Pyhon] (http://docs.python.org/glossary.html)) – Rodrigue

0

Echa un vistazo this post con muchos resultados diferentes. Lo que usted propuso anteriormente parece ser uno de los más rápidos (y los más simples)

25

Ir a un conjunto solo funciona para las listas de manera que todos sus artículos sean hashable - por ejemplo, en su ejemplo, c = [], el código que proporcione generará una excepción. Para elementos no comparables, 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 artículos no son todos lavables ni comparables, su única solución de "última zanja" es O(N squared).

Puede codificar una función de "uniquify" cualquier lista que utiliza el mejor método disponible, tratando cada enfoque a fin, con un try/except alrededor de la primera y la segunda (y una return del resultado, ya sea al final de la cláusula try, o, elegantemente, en una cláusula else de la declaración try ;-).

2

Tim Peters escribió un clásico generalcookbook recipe para este problema en 2001 (antes de que se introdujeran los juegos). Los comentarios de Alex Martelli, Raymond Hettinger et alia son informativos y incluyen la actualización de utilizar conjuntos etc.

0

Este updated post por Peter Bengtsson sugiere dos de las maneras más rápidas de hacer una lista de artículos únicos en Python 3.6+ son:

# Unordered (hashable items) 
list(set(seq)) 

# Order preserving 
list(dict.fromkeys(seq)) 
Cuestiones relacionadas