0

I have a list :

lis = ['a', 'b', 'c', 'd', 'd', 'e', 'e']

I am trying to use comprehensions to get values which are duplicate.

duplicates = set([x for x in lis if lis.count(x) > 1])

This returns :

{'d','e'}

Now I create a list out of above set :

duplicates = list(set([x for x in lis if lis.count(x) > 1]))

I get output as :

['e', 'd']

Why the order changes?

Python learner
  • 1,159
  • 1
  • 8
  • 20
Rag12
  • 11

2 Answers2

0

set does not guarantee the order, dict does.

>> duplicates = dict.fromkeys([x for x in lis if lis.count(x) > 1], None)

>> duplicates = list(duplicates); duplicates
['d', 'e']
Antony Hatchkins
  • 31,947
  • 10
  • 111
  • 111
0

That's because Set stores the elements in a random manner. Try running this code multiple times and see the outputs.

s = {"a","b","g","f"}
print(s)
Python learner
  • 1,159
  • 1
  • 8
  • 20