使用此代码:
print set(a**b for a in range(2, 5) for b in range(2, 5))
我得到了这个答案:
set([64, 256, 4, 8, 9, 16, 81, 27])
为什么没有排序?
答案 0 :(得分:7)
集合不是python或任何其他语言的有序集合。
通常使用散列键(哈希码)实现集合。因此,顺序可能与如何使用散列函数而不是其元素的自然顺序有关。
如果您需要订购,请考虑使用清单。
答案 1 :(得分:2)
集合本质上是无序容器。来自documentation:
set对象是不同的可哈希对象的无序集合。
它们使用哈希表实现,便于进行O(1)成员资格测试。如果您需要有序集,请尝试OrderedDict.fromkeys()
:
from collections import OrderedDict
OrderedDict.fromkeys(a**b for a in range(2, 5) for b in range(2, 5))