为什么在python中设置数据结构中字符串中字符的顺序发生了变化?

Why order of the characters in a string changed in set data structure in python?

本问题已经有最佳答案,请猛点这里访问。

当我在python的set data结构中发送一个字符串作为参数时,令人惊讶的是有些字符的顺序已经改变了。

假设,如果我写

1
>>> c=set('abcd')

然后,我希望集合C显示为'a'、'b'、'c'、'd',但它显示的输出如下:

1
2
>>> c
{'c', 'b', 'd', 'a'}

更重要的是,据我所知,python中的set只接受一个不可更改的对象。

因此,很明显,集合将遍历字符串,并应保持字符串的正确顺序。

我已经测试了好几次了。每次订单都发生了令人惊讶的变化……

enter image description here

我知道在python中没有所谓的字符。单个字符也定义为字符串。但是,由于迭代是通过字符串进行的,所以应该对其进行排序。

那么,有人能解释一下这种情况的原因吗?有什么见解吗在迭代过程中还是在python-vm问题上?

*我想知道集合中字符串的迭代方法,而不是听写*


集合和听写一样,没有顺序。添加到集合中的任何iterable都不会保留顺序。


如果您需要唯一的字符,同时仍保留第一个看到的字母的顺序,则可以使用OrderedDict

1
2
3
4
5
from collections import OrderedDict

unique_letters = OrderedDict((k, True) for k in 'abcdabcdabeddecd')
print(unique_letters.keys())
# ['a', 'b', 'c', 'd', 'e']

集合有一项非常重要的工作:判断集合中是否包含元素,并尽可能快地告诉它。保留插入顺序不在"设置为待办事项"列表中。


请参阅此处的set python docs https://docs.python.org/3/tutorial/datastructures.html集,您还可以看到一个简短的演示代码。


python以优化的方式存储集元素,这样它就可以以较低的运行时复杂性应用操作,也就是说,python内部在联合/交集时所需的迭代次数较少。