2011-08-03 17 views
7

Mam listę list, który wygląda tak:Uzyskaj unikalne przedmioty z listy?

animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse'],['fox','monkey', 'zebra']] 

Jaki jest najlepszy do usuwania zduplikowanych list? W powyższym przykładzie, szukam kodu, który będzie produkować to:

uniq_animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse']] 

I pierwsza myśl mogłaby używać set(), ale to nie wydaje się, aby pracować na liście list. Widziałem również przykład używając itertools, ale kod nie był dla mnie całkowicie jasny. Dzięki za pomoc!

Odpowiedz

15
uniq_animal_groups = set(map(tuple, animal_groups)) 

zrobi lewy, choć w efekcie otrzymasz zestaw krotek zamiast zestawu list. (Oczywiście możesz przekonwertować to z powrotem na listę list, ale jeśli nie ma konkretnego powodu, aby to zrobić, po co się kłopotać?)

+0

Fantastyczne! Bardzo dziękuję za pomoc, działało to doskonale. – drbunsen

+0

Cień, do którego chcesz uzyskać dostęp do listy list (np. Sprawdź 'uniq_animal_groups [0]', wykonaj 'uniq_animal_groups = list (zamiast (ustaw (map (tuple, animal_groups))) zamiast tego. –

5

Konwertuj listy na krotki, a następnie umieść je w zestawie.

Zasadniczo:

uniq_animal_groups = set(map(tuple, animal_groups)) 

Jeśli wolisz wynik będzie wykaz list, spróbuj:

uniq_animal_groups = [list(t) for t in set(map(tuple, animal_groups))] 

lub:

uniq_animal_groups = map(list, set(map(tuple, animal_groups))) 
0

Jeśli nie obchodzi sortowanie list wewnętrznych, przekonwertuj wszystko na zestawy:

uniq_animal_groups = map(list, set(map(tuple, map(set, animal_groups)))) 
Powiązane problemy