在python中,为什么字符串中的字符顺序会在集合数据结构中发生变化?
在python中,当我将字符串作为set数据结构中的参数发送时,一些字符的顺序竟然发生了变化 假设,如果我写在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将遍历字符串,并应保持正确的字符串顺序。 我已经测试过好几次了。每一次订单都发生了令人
>>> 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']