MyModHeaven 发表于 2021-11-22 14:43

python 中的字典和集合属不属于序列?

本帖最后由 MyModHeaven 于 2021-11-22 16:45 编辑

无论是python的入门书还是网上的资料,在介绍序列时,都有列表、元组、字典和集合。也有这样的分类:字典、集合是无序序列,列表、字符串、元组是有序序列;列表、字典、集合是可变序列,元组、字符串是不可变序列。

但是,在python的官方文档中(内置类型 — Python 3.10.0 文档):





序列分为:列表、元组、range对象、字符串、二进制序列类型,而集合和字典分别属于集合类型和映射类型。序列、映射、集合同属于python的内置类型,应该是平级关系。


前后不是矛盾的吗?





https://static.52pojie.cn/static/image/hrline/1.gif


多谢各位热心的吾友解答,通过翻阅官方文档,总结一下:



首先,我的问题是:字典和集合是不是属于序列。大部分回复的都没有提到这个问题,而是在说字典现在是有序的了。我认为不属于。

总结一下字典的顺序问题:

字典会保留插入时的顺序。 请注意对键的更新不会影响顺序。 删除并再次添加的键将被插入到末尾。


像列表一样,但是元素的顺序不能通过不删除的手段改变。因为,即使字典是有序的,它也没有索引,因为,dict[] 是用键来召唤的值,而不是索引,但是用索引召唤值用的也是 [],所以可以理解为在字典里,召唤神龙的手段,键 技高一筹,覆盖了索引的能量。在字典的世界里,想要排序向前进一步,只能靠继承,前面的元素被删除了,后面的才有希望提高排名,后来居上的情况不存在。


因为字典不属于序列,所以可变序列的pop(), reverse(), remove(), insert() 等方法都不能用,删除元素只能使用 del 语句,逆序用 reversed() 函数

kafei000 发表于 2021-11-22 14:54

你把你发的第一段话里面得到”序列“变成”数据结构“,就可以看懂了。
字典、集合是无序序列(无序的数据结构),列表、字符串、元组是有序序列(有序的数据结构);列表、字典、集合是可变序列(可变的数据结构),元组、字符串是不可变序列(不可变的数据结构)。

其实官方文档更加严谨。一些书难免有主观性的描述,官网文件就算有歧义,也可以经过讨论得到最终结果,能够给出解释
所有以官方文档为准

RobinZhang 发表于 2021-11-22 14:54

这个不太懂啊,最近我也在学习py,我感觉字典和集合是属于序列的,查了很多,基本都是这么说的。

kiopc 发表于 2021-11-22 15:02

kafei000 发表于 2021-11-22 14:54
你把你发的第一段话里面得到”序列“变成”数据结构“,就可以看懂了。
字典、集合是无序序列(无序的数据 ...

我觉得数组会更加贴切一些,比如说:字典、集合是无序数组

zxc9989 发表于 2021-11-22 15:03

字典3.6之后是有序的

pzx521521 发表于 2021-11-22 15:17

翻译问题
官网对序列的定义 是有序的列表
各种书中对序列的定义 基于array的数据类型

xh44113 发表于 2021-11-22 15:24

我是按刮号去理解 字典 序列 []{}()

付叔叔慢慢老i 发表于 2021-11-22 15:25

说的很好,支持。。。。

whlee 发表于 2021-11-22 16:05

在python中,字典和集合是无序的。虽然python3.6之后字典是有序的,但在定义上仍然是无序的。如果按照有序的对待,会因版本问题导致错误。所以不建议把字典当做有序的来处理。本质上来看,还是从数据结构出发来理解好一些,这个根本问题解决了,其他问题就解决了。

snlyufo666 发表于 2021-11-22 16:40

最近看的python书上没提到这个。{:1_896:}是我不会了。
页: [1] 2
查看完整版本: python 中的字典和集合属不属于序列?