38

I want to remove all duplicates list from a list of list.

So I have a list of lists like this.

a = [[1,2],[1,2],[3,4,5],[3,4,5],[3,4,5]]

I want to have:

b = [[1,2],[3,4,5]]

I don't know how to do it.

martineau
  • 119,623
  • 25
  • 170
  • 301
user1507156
  • 539
  • 1
  • 7
  • 12

2 Answers2

81

You could use a set:

b_set = set(map(tuple,a))  #need to convert the inner lists to tuples so they are hashable
b = list(map(list,b_set)) #Now convert tuples back into lists (maybe unnecessary?)

Or, if you prefer list comprehensions/generators:

b_set = set(tuple(x) for x in a)
b = [ list(x) for x in b_set ]

Finally, if order is important, you can always sort b:

b.sort(key = lambda x: a.index(x) )
Sadra
  • 2,480
  • 2
  • 20
  • 32
mgilson
  • 300,191
  • 65
  • 633
  • 696
15

See mgilson's answer if the order of the lists is not important. If you want to retain the order, do something like:

b = list()
for sublist in a:
    if sublist not in b:
        b.append(sublist)

This will keep the order in the original list. However, it is slower and more verbose than using sets.

HerrKaputt
  • 2,594
  • 18
  • 17