Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python unique list using set [duplicate]

Tags:

python

list

set

What I am trying to do is write a method that takes a list as an argument and uses a set to return a copy of the list where each element only occurs once, as well as having the elements in the new list occur in order of their first occurrence in the original list. I HAVE to use a set for this, however, I can't make it so that the output is in the right order while having a quick result. If I put something like this:

def unique(a):

return list(set(a))

and passed a list with millions of elements, it would give me a result quickly, but it wouldn't be ordered. So what I have right now is this:

def unique(a):
b = set(a)
c = {}
d = []
for i in b:
    c[a.index(i)] = i
for i in c:
    d.append(c[i])
return d

This gives me the result I want, but not fast enough. If I pass a list with a million elements, I could be waiting for half an hour, whereas the one liner up there takes less than a second. How could I solve this problem?

like image 485
user1744238 Avatar asked Feb 19 '23 20:02

user1744238


1 Answers

>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]
like image 71
jamylak Avatar answered Feb 27 '23 06:02

jamylak