Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get unique items from list of lists? [duplicate]

I have a list of lists that looks like this:

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

What is the best to remove duplicate lists? Using the above example, I am looking for code that would produce this:

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

I first thought I could use set(), but this doesn't appear to work on a list of lists. I also saw an example using itertools, but the code was not entirely clear to me. Thanks for the help!

like image 693
drbunsen Avatar asked Aug 03 '11 13:08

drbunsen


2 Answers

Convert the lists to tuples, and then you can put them into a set.

Essentially:

uniq_animal_groups = set(map(tuple, animal_groups))

If you prefer the result to be a list of lists, try:

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

or:

uniq_animal_groups = map(list, set(map(tuple, animal_groups)))
like image 41
Michael J. Barber Avatar answered Nov 07 '22 00:11

Michael J. Barber


uniq_animal_groups = set(map(tuple, animal_groups))

will do the trick, though you will end up with a set of tuples instead of a set of lists. (Of course you could convert this back to a list of lists, but unless there is a specific reason to do so, why bother?)

like image 80
Sven Marnach Avatar answered Nov 07 '22 00:11

Sven Marnach