请解释集的顺序

-1 python set

我发现了一些set在Python 中使用s的代码.我试图用列表模拟它们,但是当我pop()从它们那里得到不同的结果时!

我打开了Ipython来测试这些东西是如何工作的,并发现了一些非常奇怪的东西:

In [16]: x
Out[16]: set([])

In [17]: x.add("a")

In [18]: x.add("b")

In [19]: x.add("c")

In [20]: x
Out[20]: set(['a', 'c', 'b'])
Run Code Online (Sandbox Code Playgroud)

不应该'b'来c 之前,因为它之前是添加的吗?我不明白这一点.

jam*_*lak 15

http://docs.python.org/library/stdtypes.html#set

作为无序集合,集合不记录元素位置或插入顺序.因此,集合不支持索引,切片或其他类似序列的行为.

一组的基础数据结构是一个哈希地图,有很多对这些信息在这里.


cra*_*str 7

他们说,如果你看一下维基百科的集合条目

抽象数据结构是数据的集合或聚合.数据可以是布尔值,数字,字符或其他数据结构.如果考虑通过打包[1]或索引[2]产生的结构,则有四种基本数据结构:[3] [4]

unpackaged,unindexed:束
打包,未索引:set
unpackaged,indexed:string(sequence)
打包,索引:list(array)

所以集合没有索引,或者没有以特定方式排序.

python文档同意这一点(总是检查文档,Python有一些我见过的最好的):

5.7.设置类型

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