I have a list of lists like this:

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

I would like to get a list containing "unique" lists (based on their elements) like:

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

I cannot use set() as there are non-hashable elements in the list. Instead, I am doing this:

o = [] for e in i: if e not in o: o.append(e) 

Is there an easier way to do this?

2

4 Answers

You can create a set of tuples, a set of lists will not be possible because of non hashable elements as you mentioned.

>>> l = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] >>> set(tuple(i) for i in l) {(1, 2, 3), (2, 4, 5)} 
7
i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] print([ele for ind, ele in enumerate(i) if ele not in i[:ind]]) [[1, 2, 3], [2, 4, 5]] 

If you consider [2, 4, 5] to be equal to [2, 5, 4] then you will need to do further checks

3

You can convert each element to a tuple and then insert it in a set.

Here's some code with your example:

tmp = set() a = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] for i in a: tmp.add(tuple(i)) 

tmp will be like this:

{(1, 2, 3), (2, 4, 5)} 

Here's another way to do it:

I = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] mySet = set() for j in range(len(I)): mySet = mySet | set([tuple(I[j])]) print(mySet) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy