您应该观看此视频(尽管它是CPython1特定的并且是关于字典的-但我认为它也适用于集合)。

基本上,python对元素进行哈希处理并获取最后N位(其中N由集合的大小确定),然后使用这些位作为数组索引将对象放置在内存中。 然后按照它们在内存中存在的顺序产生对象。 当然,当您需要解决哈希之间的冲突时,图片会稍微复杂一些,但这就是要点。

还要注意,它们的打印顺序取决于您放置它们的顺序(由于碰撞)。 因此,如果您重新排序传递给dict的列表,则在发生键冲突时可能会得到其他排序。

例如:

list1 = [8,16,24]

set(list1) #set([8, 16, 24])

list2 = [24,16,8]

set(list2) #set([24, 16, 8])

请注意,顺序保留在这些集合中的事实是“巧合”,并且与冲突解决有关(我一无所知)。 关键是dict、set和dict的后3位相同。 因为它们相同,所以冲突解决方案将接管并将元素放置在“备份”存储位置,而不是第一个(最佳)选择,因此,是2952094334176176461827占据一个位置还是2952094334334176461828占据哪个位置,由哪个人首先到达聚会并接受 “最佳座位”。

如果我们用dict、set和dict重复该示例,则无论它们在输入列表中的顺序如何,您都将获得一致的顺序:

list1 = [1,2,3]

set(list1) # set([1, 2, 3])

list2 = [3,2,1]

set(list2) # set([1, 2, 3])

因为dict的后3位,set和dict是唯一的。

1注意:这里描述的实现适用于CPython dict和set。我认为一般描述对所有最新的CPython版本(最高3.6版)均有效。 但是,从CPython3.6开始,还有一个额外的实现细节,实际上保留了dict的迭代插入顺序。看来set仍然没有此属性。 pypy(此人在CPython之前就开始使用它)在此博客中描述了数据结构。 最初的想法(至少对于python生态系统而言)存储在python-dev邮件列表中。

python中什么是一个无序的不重复元素序列_无序Python集的“顺序”相关推荐

  1. 请写出一段 python 代码实现删除一个 list 里面的重复元素

    请写出一段 python 代码实现删除一个 list 里面的重复元素 方法一:利用set集合实现 info = [2017,1,16,9,2017,1,16,9] result = list(set( ...

  2. 关于python中的复数类型、下列说法错误的是_关于 Python中的复数,下列说法错误的是( )_学小易找答案...

    [单选题]下列关于运算符优先级的描述中,错误的是 . [判断题]Java 语言中定义符号常量使用final关键字.( ) [判断题]捕获异常时try语句后面通常跟有一个或多个catch()方法用来处理 ...

  3. python中的main函数可以被其他文件调用么_在Python中,如何在另一个py文件的[if\u name\uuuu='\uu main\uu']中调用子例程?...

    你不能"调用它的主函数",因为它没有主函数. 事实上,通常的处理方法是将所有这些代码移到一个函数中,然后使 __main__ 警戒代码就是这么叫的: def main(args): ...

  4. python中列表、元组、字符串都属于有序序列_列表、元组、字符串是Python的有序序列。...

    列表.元组.字符串是Python的有序序列. 答:√ 根据<劳动合同法>第五十八条的规定,劳务派遣单位应当与被派遣劳动者订立( ). 答:二年以上的固定期限劳动合同 理性的基础是(). 答 ...

  5. 请写出一段Python代码实现删除一个list里面的重复元素

    1,使用set函数,set(list) 2,使用字典函数, >>>a=[1,2,4,2,4,5,6,5,7,8,9,0]>>> b={}>>>b= ...

  6. python注销一段代码_请写出一段Python代码实现删除一个list里面的重复元素?

    方法1:使用set函数 s=set(list),然后再list(s) 方法2:append 1 defdelList(L):2 L1 =[]3 for i inL:4 if i not inL1:5 ...

  7. 从Python中的另一个文件调用函数

    本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...

  8. Python中如何定义一个函数

    任何编程语言知识它的基础知识都是有些枯燥的,我们一定要多练习, 多实践.下面小编来将一下Python中如何定义一个函数. 最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可 ...

  9. python的input添加变量_在python中如何定义一个全局变量raw_input() 与 input()的区别...

    raw_input和input两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互.但他们的功能不尽相同.下面举两个例子,来说明两者使用上的不同. 例子1Python 2.7.5 ( ...

最新文章

  1. Linux: Nginx proxy_pass域名解析引发的故障
  2. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (16) - L1数据缓存/存储转发访存消歧存储体冲突
  3. python实现解析oui.txt并抽取MAC前缀及组织名称
  4. java对类数组进行排序_Java比较器类对数组进行排序
  5. 人工智能大火能否烧开智能家居这锅水?
  6. LayaAir cacheAs 缓存与 visible 隐藏
  7. Windows 7 纯净版各版本下载
  8. Android 签名打包
  9. PackageManager使用详解
  10. 英雄联盟加载的时候特卡,排查记录:win10那些破玩意
  11. 惊呆了,Java居然已经内卷成菜花啦。
  12. 最佳阵容 | Flutter Firebase 插件更新
  13. 2019年第四届天梯赛 CCCC 赛后总结(写一下)
  14. python怎么自学
  15. android 地铁地图api,入门指南-地铁图 JS API | 高德地图API
  16. Pytorch入门:LeNet手写字体识别案例
  17. led灯实现跑马灯效果,达到设定时间(2秒)两LED灯全部亮起,持续时间1秒,而后重新恢复跑马灯效果;
  18. 绑定句柄无效错误的解决办法
  19. 毕业论文排版(二)-页面设置
  20. WEB开发36式打狗棒法

热门文章

  1. Spring AOP(切面面向接口)
  2. 概说SEO中的过度优化
  3. R语言作业--第六章判别分析
  4. Android 长按APP图标弹出快捷方式(shortcuts)
  5. cs61a笔记-2020fall
  6. C的free的参数是空指针的问题
  7. CTF之懵懂时期系列---文件上传
  8. windows远程控制mac的步骤
  9. 最新版穿越火线游戏识别教程(人工智能yolov5)
  10. 如何利用html制作电影影评网,HTML制作电影影评网 - 手册网