Python3常用数据结构

Python3中有三种组合数据类型,分别为:

  • 序列类型:字符串(str)、元组(tuple)、列表(list)
  • 集合类型:集合(set)
  • 映射类型:字典(map)

序列类型

Python序列类似于其他语言中的数组。支持双向索引。第一个元素为0,最后一个元素为-1
在这里插入图片描述

列表

内置可变序列,所有元素放在一对中括号中,并用逗号分隔。当列表元素增加或者删除时,列表对象自动进行扩展或者收缩内存,保证元素之间没有缝隙。一个列表中的元素可以各不相同

创建和删除

使用=直接将一个列表赋值给变量即可创建列表对象。也可以使用list()函数将元组、range对象、字符串和其他类型的可迭代对象转化为列表
当列表不再使用时可以用del命令删除整个列表。如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。

元素的增加
  • 使用+运算符将元素添加到列表中(严格意义上来讲,这并不是真的为列表添加元素,而是创建一个新列表并将原列表中的元素和新元素依次复制到新列表的内存空间,因此效率较慢
  • 使用append()方法,原地修改列表,效率较高
  • 直接修改序列变量将会改变所指向的内存地址,而不是改变其所指向内存中的值。
  • 原地操作(通过下标修改、通过序列本身提供的方法)将不会改变所指向的内存地址
    在这里插入图片描述
  • extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。属于原地操作
  • insert()方法可以将元素添加至列表的指定位置。需要移动后面所有的元素,效率较低。
  • 使用乘法扩展列表对象
    在这里插入图片描述
    当被扩展列表中的元素是引用的时候,扩展后的列表中的元素是相等的引用,如果对其中某一个引用所指向的地址空间进行修改,指向同一片区域的引用对应的值也会修改,根本原因在于乘法操作所进行的是浅复制,后面有对浅复制的介绍
    在这里插入图片描述
元素的删除
  • 使用del命令删除列表中指定位置上的元素 ,原地操作
  • 使用列表的.pop()方法删除并返回元素,默认删除最后一个位置的元素
  • remove()方法删除首次出现的指定元素,如果不存在抛出异常
    在这里插入图片描述
    解决方法,可以使用x[:]深复制,详见我之前的博客:Python a和a[:]的区别
    或者使用del从后往前进行删除
    在这里插入图片描述
元素的访问和计数
  • 使用下标访问,如果超出范围则抛出异常
  • 使用index()方法获取指定元素首次出现的下标。若不存在指定元素抛出异常
  • 使用count()方法统计指定元素在列表对象中出现的次数
切片操作

适用于列表、元组、字符串、range对象
语法:list[begin:end:step]返回一个新列表
在这里插入图片描述

切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表
通过切片操作可以修改和删除列表中的部分元素,甚至可以通过切片操作为列表对象增加元素

在这里插入图片描述切片操作是原位操作,不会修改所指向的地址空间

在这里插入图片描述
切片操作是一种浅复制
浅复制:把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个
在这里插入图片描述
当我们对某个元素进行修改的时候其实修改的是他的引用,如果我们修改的是引用所指向的空间,那么所有指向该空间的值都会发生改变

排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的reversed对象好像只能访问一次

常用方法

在这里插入图片描述

常用内置函数
  • len(列表)返回列表中元素的个数
  • max() min()返回最大元素或者最小元素
  • sum()对列表元素进行求和,同样适用于元组、range
    在这里插入图片描述
  • zip()返回可迭代的zip对象
    在这里插入图片描述
  • enumerate()枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效
列表推导式

在列表推导式中使用多个循环实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

元组

元组和列表类似,但属于不可变序列
和列表的区别:

  • 元组中的数据一旦定义就不允许更改,也没有对应的修改的方法
  • 从效果上看,tuple()冻结列表,而list()融化元组
    优点:
  • 速度比列表快
  • 不需要担心被修改,更安全
  • 元组可以当作字典键(特别是包含字符串、树枝和其他元组这样不可变数据的元组)。列表永远不能当作字典键使用,因为列表是可变的。
创建与删除
  • 使用=将一个元组赋值给变量,需要注意的是一个元素的时候必须在元素后面加上逗号,否则将会当作里面的元素
  • 使用tuple()函数将其他序列转换为元组
  • 使用del删除元组对象,不过不能删除元组中的元素
序列解包

在这里插入图片描述

集合

集合是无序可变序列,使用一对大括号界定,元素不可重复,用一个集合中每个元素都是唯一的。

集合中只能包含数字、字符串、运足等不可变类型(可哈希类型)的数据,而不能包含列表、字典、集合等可变类型的数据

创建和删除
  • 等号赋值
  • set()函数进行转换,而且会自动去重
  • 使用del删除整个集合
  • 使用pop()弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法清空集合
集合操作

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

字典

字典是无需可变序列,是实现键值对映射的数据结构
字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息。字典中的键可以为任意不可变元素,如整数、实数、复数、字符串、元组等。
定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号中
globals()返回包含当前作用域内所有全局变量和值的字典
locals()返回包含当前作用域内所有局部变量和值的字典

创建和删除
  • 等号赋值

在这里插入图片描述

  • 使用dict()利用已有数据创建字典
    在这里插入图片描述在这里插入图片描述
元素的读取
  • 以键作为下标可以读取字典元素,若键不存在则抛出异常
  • get()方法获取指定键对应的值,并且在键不存在的时候返回指定值
    在这里插入图片描述
  • 使用items()方法可以返回字典的键、值对列表
  • 使用key()方法返回键列表
  • 使用values()方法返回字典的值列表
    在这里插入图片描述
元素的添加和修改
  • 以指定键为下标为字典赋值时,若键存在则修改该键的值,若不存在则添加一个键值对
  • 使用update()方法将另一个字典的键值对添加到当前字典对象
    在这里插入图片描述
  • 使用del删除字典中指定键的元素
  • 使用pop()方法删除并返回指定键的元素
  • 使用clear()方法删除字典中的所有元素
  • 使用popitem()方法删除并返回字典中第一个元素
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值