>>> {x for x in 'spam'}
{'a', 'p', 's', 'm'}
为什么要改变订单?如果你看一个循环,它可以很好地工作:
>>> for x in 'spam':
... print(x)
...
s
p
a
m
>>>
答案 0 :(得分:6)
python(和set theory)中的集合未被排序。所以当你遍历它们时,没有定义的顺序。
您遍历字符串文字'spam'
以创建包含该字符串中每个字符的集合。一旦你这样做,订单就不见了。
当你对for
执行'spam'
循环时,你正在对一个确实有序的字符串执行循环。
答案 1 :(得分:5)
来自Set types:
这些表示无序的,有限的唯一不可变对象集。因此,它们不能被任何下标索引 [因为没有在elemnts中定义排序] 。但是,它们可以迭代,内置函数len()返回集合中的项目数。集合的常见用途是快速成员资格测试,从序列中删除重复项,以及计算数学运算,如交集,并集,差异和对称差异。
但如果您确实需要保留订单,请检查ordered set。
无论如何,你可能真的只想写>>> set('spam')
而不是任何理解。
答案 2 :(得分:1)
set
不是有序集合,因此,键的内部顺序是未定义的。
答案 3 :(得分:1)
set对象是不同的hashable对象的无序集合。常见用途包括成员资格测试,从序列中删除重复项,以及计算数学运算,如交集,并集,差异和对称差异。 (对于其他容器,请参阅内置的dict,list和tuple类以及collections模块。)
答案 4 :(得分:1)
set
无序。这样做的原因是,通过使用不保留顺序的适当数据结构,它们的实现运行速度更快。如果需要订购,可以使用(较慢的)OrderedDict类型。
答案 5 :(得分:0)
Python sets are defined as unordered,因此Python可以随意订购它们(有效地,我按下它)。