一文搞懂python数据类型和结构

总览

前言

每次python从入门到精通都是从头开始看,做这个学习笔记主要是为了让自己可以省去学习数据类型和结构那几章的时间,所以“偷懒”可以促进生产力发展......

python中有6大数据类型

分别是:整数型、浮点型、复数、常量、布尔型、字符串。其中复数基本不会使用到,可以不用太关注

image.png

数据类型比较简单,这里就不多说了,如果不太懂的可以直接看教程:https://www.runoob.com/python/python-variable-types.html

python中有4大数据结构

分别是列表、字典、集合和元组,其中最常见并且工作中经常使用到的就是列表和字段,其他两个不常见。

image.png

01、列表
列表可能是在使用python中最为常用的数据结构了,它类似于其他语言中的数组,但又可以存储多种数据类型,同时还可以自适应更改列表长度。
列表简单易用且不失功能强大,除了丰富的魔法方法外,列表支持直接调用的接口并不多(通过dir(list)命令可以查看列表的所有接口),主要包括11个接口方法:

  • append:在列表尾端增加一个元素
  • insert:在列表指定位置插入一个元素,值得说明的是insert的目标索引位置可以为任意参数,当超过列表长度时会自动截断插入
  • extend:与另一个列表进行拼接扩展
  • pop:删除一个元素,接受一个索引参数,且要求索引为有效索引,不允许超出列表索引范围;缺省为-1,此时删除尾端元素
  • remove:删除一个元素,接受一个列表元素参数,要求该元素在列表中存在,不可缺省
  • clear:清空整个列表,相当于为列表赋值为空列表
  • index:查找目标元素在列表中的索引,要求该元素在列表中存在,否则报错
  • count:计算目标元素在给定列表中的个数,当目标元素不存在时返回0
  • sort:对列表进行inplace排序,可接受一个key参数指定排序规则,接受reverse参数明确是正序还是逆序
  • reverse:对列表进行inplace翻转
  • copy:对列表进行浅拷贝
    列表的这些方法中,除了clear用的较少外,其他都是常用接口,需要注意的是虽然pop、remove、index和insert操作语法比较类似,但存在一个最大的不同是:insert接受的索引参数可以是任意索引,无论是否超出列表合法索引;而pop接受的索引必须是合法索引、index和remove接受的元素必须是存在的元素,否则会报错。


    image.png

    image.png

02、字典
列表之外,字典可能是python中用的也比较多的数据结构了,由于字典的底层应用哈希映射,所以要求字典的所有key必须是不可变元素(可哈希对象),增删改查操作一般都能实现O(1)复杂度,是低复杂度的必备数据结构。

  • fromkeys:从一个序列化对象(如列表等)创建一个字典,同时可接受一个缺省参数作为value,缺省时value为None
  • setdefault:与查找的get方法类似,当查找的key存在时返回其value值;否则在字典中增加该键值对,若value缺省,则value为None
  • pop:接受一个key,删除该元素并返回其value值,实际上相当于列表的remove
  • popitem:不接受任何参数,删除字典最后一个元素并返回其value值(python3.6以后,字典元素按照插入先后默认有序),当字典为空时引发错误,实际上相当于列表的pop()缺省参数操作
  • clear:与列表clear类似,清空字典
  • update:相当于列表的extend操作,但遇到相同的key时会保留后面字典中相应的value值
  • keys:返回字典的所有键
  • values:返回字典的所有值
  • items:返回字典的所有键值对,每个键值对为元组形式
  • get:接受一个key和一个默认value,当字典中存在该元素时返回其value,否则返回默认值
  • copy:字典的浅拷贝
image.png

image.png

03、集合
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合操作可能最常见于用于对列表去重,它的最大特性是各元素仅保留1次,底层也是应用了哈希函数,所以在集合中查找元素一般也可实现O(1)复杂度,同时集合的嵌套元素也要求是不可变类型(可哈希对象)
add:在集合中增加一个元素,如果元素已存在,则无实际操作

pop:不接受任何参数,堪称是最神秘的操作,不同于列表的从尾端删除、字典的指定键删除,集合的pop操作看似是"随机"删除。但实际上是按照加入集合的先后顺序,删除"最早"加入的元素

  • remove:类似于列表的remove操作,移除指定元素,当元素不存在时引发错误
  • discard:remove的替代版,当元素存在时移除,元素不存在时无操作且不报错
  • clear:清空集合
  • update:接受一个可迭代对象(可以不是集合类型),类似字典的update操作,逐一插入
  • copy:集合的浅拷贝


    image.png

除了与列表和字典中类似的增删改操作外,集合还支持数学概念下的集合操作,如交集、并集、差集等。

  • interp:接受两个集合作为参数,求两个集合的交集,生成新集合作为返回结果
  • interp_update:对interp的变形,在调用方法的集合上进行inplace操作,无返回值
  • isdisjoint:判断两个集合中是否存在公共元素,不存在公共元素时结果为True,否则为False
  • union:接受两个集合作为参数,返回并集的新集合作为返回值。ps:并集操作的inplace操作接口即为update
  • difference:接受两个集合作为参数,求前者与后者的差集,生成新集合作为返回结果
  • difference_update:与交集类似,对调用方法的集合进行inplace操作
  • symmetric_difference:对称差集,类似于补集,返回两个集合除公共元素意外的并集,即A有B无或A无B有的元素
  • symmetric_difference_update:对调用方法的集合进行inplace操作
  • issubset:判断是否是子集,返回bool结果
  • issuperset:判断是否是超集,返回bool结果
image.png

04、元组
如果说列表、字典和集合都有其各自擅长应用场景的话,那么元组可能是最没有存在感的数据结构:它接口有限、功能单一,而且是不可变类型。一般而言,用元组解决的问题都可以用列表实现。但使用用元组时,更多在于暗示该序列为不可变类型。当然,当元组内嵌套子列表时实际上是可以对嵌套的子列表进行更改操作的。

正因为元组的不可变特性,其操作接口十分有限,仅包括查找和计数两个接口:
image.png
  • index:查找给定元素的索引,若元素不存在报错

  • count:对给定元素在元组中的出现次数计数,不存在时返回0


    image.png

参考文档:

代码地址:

https://github.com/zqkyy/py_basic_structure

有问题可以私信我,欢迎交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容