Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,为什么字符串中的字符顺序会在集合数据结构中发生变化?_Python_String_Iteration - Fatal编程技术网

在python中,为什么字符串中的字符顺序会在集合数据结构中发生变化?

在python中,为什么字符串中的字符顺序会在集合数据结构中发生变化?,python,string,iteration,Python,String,Iteration,在python中,当我将字符串作为set数据结构中的参数发送时,一些字符的顺序竟然发生了变化 假设,如果我写 >>> c=set('abcd') 然后我应该期望集合c显示为{'a','b','c','d},但它显示的输出如下:- >>> c {'c', 'b', 'd', 'a'} 更重要的是,据我所知,python中的set只接受一个可编辑的对象 因此,很明显,set将遍历字符串,并应保持正确的字符串顺序。 我已经测试过好几次了。每一次订单都发生了令人

在python中,当我将字符串作为set数据结构中的参数发送时,一些字符的顺序竟然发生了变化

假设,如果我写

>>> c=set('abcd') 
然后我应该期望集合c显示为{'a','b','c','d},但它显示的输出如下:-

>>> c
{'c', 'b', 'd', 'a'}
更重要的是,据我所知,python中的set只接受一个可编辑的对象

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

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

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

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


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

集合与dict一样,是不有序的。添加到集合中的任何iterable都不会保持顺序。

集合与dict一样,都不会排序。添加到集合中的任何iterable都不会保留顺序。

这里指的是集合python文档,您还可以看到一个简短的演示代码。

这里指的是集合python文档,您还可以看到一个简短的演示代码。

如果您想要唯一的字符,同时仍然保留第一次看到的字母顺序,您可以使用:


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

如果您希望在保留首字母顺序的同时使用唯一字符,可以使用:


集合有一项非常重要的工作:判断集合中是否包含元素,并尽快告诉它。保持插入顺序不在set todo列表中。

Python以优化的方式存储集合元素,以便它可以应用运行时复杂度较低的操作,即Python内部在并集/交集中所需的迭代次数较少。

Python以优化的方式存储集合元素,以便它可以应用运行时复杂度较低的操作运行时的复杂性,即Python内部在联合/交集中需要更少的迭代次数。

您能解释一下为什么它不能保持顺序吗??当我发送集合中的任何列表或元组时,它会保持正确的顺序。那么为什么不使用字符串呢?不,它没有-或者如果它有,那只是巧合。所有iterables在转换为集合时都是一样的,因为集合是对成员的散列值而不是实际值进行操作的。你能解释一下为什么它不会保留顺序吗??当我发送集合中的任何列表或元组时,它会保持正确的顺序。那么为什么不使用字符串呢?不,它没有-或者如果它有,那只是巧合。所有iterables在转换为集合时都是一样的,因为集合是对成员的散列值而不是实际值进行操作的。谢谢。我看到了。但我的问题是,为什么它不维护秩序?迭代器按顺序进行迭代不是很容易吗??:(:(谢谢。看到了。但我的问题是为什么它不保持顺序?迭代器按顺序迭代不是很容易吗?)(至于你关于它为什么不能维持秩序的问题,请看@roganjosh…谢谢..我得到了我想要的。至于你关于它为什么不能维持秩序的问题,请看@roganjosh…谢谢..我得到了我想要的。
from collections import OrderedDict

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