Python – 容器解析“ 列表(list)、元组(tuple)、集合(set)、字典(dict)”
Python 支持一种数据结构的基本概念,名为容器(container)。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每一个元素都有编号,而在映射中,每个元素都有名称(也叫键)。有一种既不是序列也不是映射的容器,它就是集合(set)。
1.列表(list)
列表是可变的,即可修改其内容。
1.1 列表的含义
列表是一种线性表,由大量的节点组成,每一个节点都可以存储数据,列表可以存储大量的数据的容器。
1.2 基本的列表操作
可对列表执行所有的标准序列操作,如索引、切片、拼接和相乘,但列表的有趣之处就是可以修改。下面是修改列表的几种方式:给元素赋值、删除元素、给切片赋值以及使用列表的方法(注:并非所有的列表方法都会修改列表。)
1.2.1 修改列表:给元素赋值
使用索引表示法给特定位置的元素赋值
eg:
注:不能给不存在的元素赋值
1.2.2 删除元素
从列表中删除元素使用 del 语句即可
eg:
列表 success 中 57 彻底消失了,列表的长度也从 5 变成了 4 。
1.2.3 给切片赋值
切片的功能很强大,给切片赋值让这项功能更强大
eg:
从上述代码可知,可以同时给多个元素赋值,通过使用切片赋值,可将切片替换为长度与其不同的序列。
eg:
使用切片赋值还可以在不替换原有元素的情况下插入新的元素
eg:
上面相当于插入了一个序列,也可以采取相反的措施来删除切片
eg:
上述代码和 del sum[1:3] 等效。
1.3 列表的常用方法
1.3.1 append 将一个对象附加到列表末尾
eg:
1.3.2 clear 清空列表的内容
eg:
1.3.3 copy 复制列表
eg:
1.3.4 count 计算指定的元素在列表中出现的次数
eg:
1.3.5 extend 同时将多个值附加到列表末尾,可将这些值组成的序列作为参数提供给 extend。换言而之,可使用一个列表来扩展另一个列表。
eg:
1.3.6 index 在列表中查找指定值第一次出现的索引
eg:
可以索引到出现的 name 的位置,没有的 name 索引不到。
1.3.7 insert 将一个对象插入列表
eg:
1.3.8 pop 从列表中删除一个元素(末尾最后一个元素),并返回这一元素
eg:
pop 是唯一既修改列表又返回一个非 None 值得列表方法。
使用pop可以实现一种常见的数据结构——栈( stack )。栈就像一叠盘子,你可以在上面添加盘子,还可以从上面取走盘子。最后加入的盘子最先取走,叫做后进先出( LIFO )
1.3.9 remove 用于删除第一个指定值得元素
eg:
只删除了为指定值的第一个元素,无法删除列表中其他为指定值的元素。
remove 是就地修改且不返回值的方法之一。不同于 pop 的是,它修改列表,但不返
回任何值。
1.3.10 reverse 按相反的顺序排列列表中的元素
eg:
注: reverse 修改列表,但不返回任何值(与 remove 和 sort 等方法一样)。
1.3.11 sort 对列表就地排序
eg:
元素按顺序排列,而不是返回排序后的列表的副本。
2.元组(tuple)
不可修改的序列
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的(字符串也不能修改)。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组
eg:
2.1 元组的常用方法
2.1.1 count 统计元素的个数
2.1.1 index 查找索引位置
注: 元组是不可变类型,意味着当元组中的值定义好之后,再无法修改,但是,如果元组的元素是可变类型,那么该元组是可变的!!!
在定义元组时,如果只有一个元素,那么一定要在该元素后面加个逗号,否则Python解释器会将该元组当成一个数字对待(圆括号就数学上的含义)
eg:
3.集合(set)
使用全局函数 set()
eg:
注: 可使用序列(或其他可迭代对象)来创建集合,也可使用花括号显式地指定。注意,不能仅使用花括号来创建空集合,因为这将创建一个空字典。
eg:
必须在不提供任何参数的情况下调用 set 。集合主要用于成员资格检查,因此将忽略重复的元素
eg:
与字典一样,集合中元素的排列顺序是不确定的,因此不能依赖于这一点
eg:
集合是可变的,因此不能用作字典中的键。另一个问题是,集合只能包含不可变(可散列)的值,因此不能包含其他集合。由于在现实世界中经常会遇到集合的集合,因此这可能是个问题。所幸还有frozenset 类型,它表示不可变(可散列)的集合。
eg:和列表类似
注: 在 Python 中,{}不一定是 set ,也有可能是字典
如果没有初始化的值,不能直接用 {} 反向定义,默认为字典类型
集合的特点: 元素唯一,不允许重复,无序
3.1 集合的常用方法
3.1.1 add 添加元素(值)
eg:
3.1.2 clear 清除元素(值)
3.1.3 copy 复制
3.1.4 difference 差集
eg:
反着写:
3.1.5 discard 移除元素,如果存在,不存在也不报错
3.1.6 intersection 交集
eg:
3.1.7 pop 随机移除(一般不用)
无序移除
eg:
3.1.8 remove 移除
指定移除
eg:
3.1.9 union 并集
eg:
4.字典(dict)
可通过名称来访问其各个值的数据结构。这种数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。
4.1 字典的用途
- 表示棋盘的状态,其中每个键都是由坐标组成的元组;
- 存储文件修改时间,其中的键为文件名;
- 标签/地址。
4.2 字典的创建和使用
字典由键及其相应的值组成,这种键–值对称为项(item)。每个键与其值之间都用冒号( : )分隔,项之间用逗号分隔,而整个字典放在花括号内。空字典(没有任何项)用两个花括号表示,类似于下面这样: {} 。
注: 在字典(以及其他映射类型)中,键必须是独一无二的,而字典中的值无需如此。
4.2.1 函数 dict
使用函数 dict 从其他映射(如其他字典)或键–值对序列创建字典。
eg:
4.3 字典的常用方法
4.3.1 clear 删除所有的字典项,且什么都不返回(或者说返回 None )。
eg:
4.3.2 copy 返回一个新字典
eg:
4.3.3 fromkeys 创建一个新字典
eg:
4.3.4 get 访问字典
eg:
如果访问字典中没有的项,将引发错误。而使用 get 不会这样。
如果字典包含指定的键, get 的作用将与普通字典查找相同。
eg:
4.3.5 items 返回一个包含所有字典项的列表
eg:
4.3.6 keys 返回一个字典视图,其中包含指定字典中的键
4.3.7 pop 获取与指定键相关联的值,并将该键–值对从字典中删除
eg:
4.3.8 popitem 类似于 list.pop ,但 list.pop 弹出列表中的最后一个元素,而 popitem 随机地弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。如果你要以高效地方式逐个删除并处理所有字典项,这可能很有用,因为这样无需先获取键列表
eg:
4.3.9 values 返回一个由字典中的值组成的字典视图
注: 同于方法 keys ,方法 values 返回的视图可能包含重复的值。
eg: