Python: order in a set of numbers

前端 未结 2 451
小鲜肉
小鲜肉 2020-12-12 06:07

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,         


        
相关标签:
2条回答
  • 2020-12-12 06:58

    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.

    0 讨论(0)
  • 2020-12-12 07:02

    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))
    
    0 讨论(0)
提交回复
热议问题