With this code:
print set(a**b for a in range(2, 5) for b in range(2, 5))
I get this answer:
set([64, 256, 4, 8, 9, 16, 81,
Sets are not ordered collections in python or any other language for that matter.
Sets are usually implemented using hash keys (hash codes). So order is probably related to how hash functions are used instead of natural order of its elements.
If you need order, please do consider using a list.
Sets are by their nature unordered containers. From the documentation:
A set object is an unordered collection of distinct hashable objects.
They are implemented using a hash table, facilitating O(1) membership tests. If you need an ordered set, try OrderedDict.fromkeys()
:
from collections import OrderedDict
OrderedDict.fromkeys(a**b for a in range(2, 5) for b in range(2, 5))