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只接受一个不可更改的对象。
因此,很明显,集合将遍历字符串,并应保持字符串的正确顺序。
我已经测试了好几次了。每次订单都发生了令人惊讶的变化……
。
我知道在python中没有所谓的字符。单个字符也定义为字符串。但是,由于迭代是通过字符串进行的,所以应该对其进行排序。
那么,有人能解释一下这种情况的原因吗?有什么见解吗在迭代过程中还是在python-vm问题上?
*我想知道集合中字符串的迭代方法,而不是听写*
集合和听写一样,没有顺序。添加到集合中的任何iterable都不会保留顺序。
如果您需要唯一的字符,同时仍保留第一个看到的字母的顺序,则可以使用
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内部在联合/交集时所需的迭代次数较少。