1

In Python3 I wrote a simple one line code as follows :

{ 2*x  for x in {1,2,3,4} } 

but I m getting answer like this (order changed).

{8, 2, 4, 6}

Why I am getting answer {8,2,4,6} instead of {2,4,6,8}?

Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504

2 Answers2

8

That's because sets don't have any order. They're unordered collection.

help on set:

Build an unordered collection of unique elements.

If you want the order to be preserved then you can use list, tuple or collections.OrderedDict here.

Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
5

Because a set has no fixed order. Quoting the set documentation:

A set object is an unordered collection of distinct hashable objects.

Use a list or tuple if you require ordering, or use an OrderedDict() object to create unique keys that preserve ordering:

from collections import OrderedDict

ordered_unique_values = list(OrderedDict.fromkeys(2*x for x in (1,2,3,4)))
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343