概述
今天同事问我一个问题,为啥他对一个列表用set去重后在转为list,原来的列表顺序就会发生改变。想来应该是set本身无序,经过他处理顺序就会发生改变,但是这样说感觉没有说服力,就自己试了一下。
为啥列表[1,8]和列表[8,1]结果一样
为啥有时候给咱排序,有时候不给咱排序。完全搞不懂他是想弄啥嘞。默默的去看了一下set的原理,才发现了问题。
set去重是通过__hash__和__eq__结合来完成。后者不用说了就是判断相等,前者构造了一个哈希表,啥事哈希表,这里就不细讲了。这里面的哈希表可以把它当做一个字典(中华字典,并不是dict),每次运行__hash__都会生成一个哈希表,这个东西咱没给他指定表,人家怎么生成的就不知道了(可能是随机的也可能有一定的规律,这块咱不懂也不敢乱说)。弄到这就知道为啥他会乱序,这个坑咱就算记住了。
踩了这个坑怎么办?以后绕着他走还是给他补上,当然绕是不可能绕的,只要有方法就不可能绕。
sort()排序,用列表进行sort排序,排序规则按照set钱的列表索引
举个例子哈
这个例子大家都能看懂把。
好吧这个坑到这算是知道问题在哪,怎么解决。如果哪位仁兄能够详细告知内部原理,小弟也是万分感谢
最后
以上就是难过星星为你收集整理的list(set())顺序发生改变的全部内容,希望文章能够帮你解决list(set())顺序发生改变所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复