2012-06-29 12 views
5

Sai, per attivare la lista:Python - Modo veloce per rimuovere i duplicati in questo elenco?

a = ["hello", "hello", "hi", "hi", "hey"] 

in elenco:

b = ["hello", "hi", "hey"] 

È sufficiente farlo in questo modo:

b = list(set(a)) 

E 'veloce e divinatorio.

Ma cosa succede se ho bisogno di trasformare questa lista:

a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], 
    ["how", "what"]] 

a:

b = [["hello", "hi"], ["how", "what"]] 

Qual è il modo divinatorio per farlo?

risposta

14
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> set(map(tuple, a)) 
set([('how', 'what'), ('hello', 'hi')]) 
+1

Grazie mille, amico! – Shane

+0

@Shane Nessun problema: D – jamylak

1

Solo un altro approccio che non è buono (anche se funziona per gli oggetti nel calcolo dell'hash fintanto che sono ordinabili)

>>> from itertools import groupby 
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> [k for k, g in groupby(sorted(a))] 
[['hello', 'hi'], ['how', 'what']] 
+0

+1 per essere l'unico a non convertire gli elenchi in tuple. Il suo esempio ha un elenco di liste non di tuple –

0

Se l'ordine originale deve essere conservato e si dispone di Python 2.7 +

>>> from collections import OrderedDict 
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> list(OrderedDict.fromkeys(map(tuple, a))) 
[('hello', 'hi'), ('how', 'what')] 
Problemi correlati