Python 支持一种数据结构的基本概念,名为容器(container)。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每一个元素都有编号,而在映射中,每个元素都有名称(也叫键)。有一种既不是序列也不是映射的容器,它就是集合(set)。
列表是可变的,即可修改其内容。
列表是一种线性表,由大量的节点组成,每一个节点都可以存储数据,列表可以存储大量的数据的容器。
可对列表执行所有的标准序列操作,如索引、切片、拼接和相乘,但列表的有趣之处就是可以修改。下面是修改列表的几种方式:给元素赋值、删除元素、给切片赋值以及使用列表的方法(注:并非所有的列表方法都会修改列表。)
使用索引表示法给特定位置的元素赋值
eg:
注:不能给不存在的元素赋值
从列表中删除元素使用 del 语句即可
eg:
列表 success 中 57 彻底消失了,列表的长度也从 5 变成了 4 。
切片的功能很强大,给切片赋值让这项功能更强大
eg:
从上述代码可知,可以同时给多个元素赋值,通过使用切片赋值,可将切片替换为长度与其不同的序列。
eg:
使用切片赋值还可以在不替换原有元素的情况下插入新的元素
eg:
上面相当于插入了一个序列,也可以采取相反的措施来删除切片
eg:
上述代码和 del sum[1:3] 等效。
eg:
可以索引到出现的 name 的位置,没有的 name 索引不到。
eg:
pop 是唯一既修改列表又返回一个非 None 值得列表方法。
使用pop可以实现一种常见的数据结构——栈( stack )。栈就像一叠盘子,你可以在上面添加盘子,还可以从上面取走盘子。最后加入的盘子最先取走,叫做后进先出( LIFO )
eg:
只删除了为指定值的第一个元素,无法删除列表中其他为指定值的元素。
remove 是就地修改且不返回值的方法之一。不同于 pop 的是,它修改列表,但不返
回任何值。
eg:
注: reverse 修改列表,但不返回任何值(与 remove 和 sort 等方法一样)。
不可修改的序列
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的(字符串也不能修改)。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组
eg:
注: 元组是不可变类型,意味着当元组中的值定义好之后,再无法修改,但是,如果元组的元素是可变类型,那么该元组是可变的!!!
在定义元组时,如果只有一个元素,那么一定要在该元素后面加个逗号,否则Python解释器会将该元组当成一个数字对待(圆括号就数学上的含义)
使用全局函数 set()
eg:
注: 可使用序列(或其他可迭代对象)来创建集合,也可使用花括号显式地指定。注意,不能仅使用花括号来创建空集合,因为这将创建一个空字典。
eg:
必须在不提供任何参数的情况下调用 set 。集合主要用于成员资格检查,因此将忽略重复的元素
eg:
与字典一样,集合中元素的排列顺序是不确定的,因此不能依赖于这一点
eg:
集合是可变的,因此不能用作字典中的键。另一个问题是,集合只能包含不可变(可散列)的值,因此不能包含其他集合。由于在现实世界中经常会遇到集合的集合,因此这可能是个问题。所幸还有frozenset 类型,它表示不可变(可散列)的集合。
eg:和列表类似
注: 在 Python 中,{}不一定是 set ,也有可能是字典
如果没有初始化的值,不能直接用 {} 反向定义,默认为字典类型
集合的特点: 元素唯一,不允许重复,无序
可通过名称来访问其各个值的数据结构。这种数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。
字典由键及其相应的值组成,这种键–值对称为项(item)。每个键与其值之间都用冒号( : )分隔,项之间用逗号分隔,而整个字典放在花括号内。空字典(没有任何项)用两个花括号表示,类似于下面这样: {} 。
注: 在字典(以及其他映射类型)中,键必须是独一无二的,而字典中的值无需如此。
使用函数 dict 从其他映射(如其他字典)或键–值对序列创建字典。
eg:
eg:
如果访问字典中没有的项,将引发错误。而使用 get 不会这样。
如果字典包含指定的键, get 的作用将与普通字典查找相同。
eg: