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, 27])
Why it isn't sorted?
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, 27])
Why it isn't sorted?
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))
Python lists have a built-in
list.sort()
method that modifies the list in-place. There is also asorted()
built-in function that builds a new sorted list from an iterable.
nums_set = set(a**b for a in range(2, 5) for b in range(2, 5))
# OR
# nums_set = {a**b for a in range(2, 5) for b in range(2, 5)}
print("sorted set =", sorted(nums_set))
# sorted set = [4, 8, 9, 16, 27, 64, 81, 256]