集合如何在Python中运行?

时间:2011-07-31 16:44:08

标签: python

>>> {x for x in 'spam'}
{'a', 'p', 's', 'm'}

为什么要改变订单?如果你看一个循环,它可以很好地工作:

>>> for x in 'spam':
...     print(x)
... 
s
p
a
m
>>> 

6 个答案:

答案 0 :(得分:6)

python(和set theory)中的集合未被排序。所以当你遍历它们时,没有定义的顺序。

您遍历字符串文字'spam'以创建包含该字符串中每个字符的集合。一旦你这样做,订单就不见了。

当你对for执行'spam'循环时,你正在对一个确实有序的字符串执行循环。

答案 1 :(得分:5)

来自Set types

这些表示无序的,有限的唯一不可变对象集。因此,它们不能被任何下标索引 [因为没有在elemnts中定义排序] 。但是,它们可以迭代,内置函数len()返回集合中的项目数。集合的常见用途是快速成员资格测试,从序列中删除重复项,以及计算数学运算,如交集,并集,差异和对称差异。

但如果您确实需要保留订单,请检查ordered set

无论如何,你可能真的只想写>>> set('spam')而不是任何理解。

答案 2 :(得分:1)

set不是有序集合,因此,键的内部顺序是未定义的。

答案 3 :(得分:1)

来自docs.python.org

  

set对象是不同的hashable对象的无序集合。常见用途包括成员资格测试,从序列中删除重复项,以及计算数学运算,如交集,并集,差异和对称差异。 (对于其他容器,请参阅内置的dict,list和tuple类以及collections模块。)

答案 4 :(得分:1)

根据定义,

set 无序。这样做的原因是,通过使用不保留顺序的适当数据结构,它们的实现运行速度更快。如果需要订购,可以使用(较慢的)OrderedDict类型。

答案 5 :(得分:0)

Python sets are defined as unordered,因此Python可以随意订购它们(有效地,我按下它)。