序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串,均可以可以视为序列。
如图,序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列
- 起始下标表示从何处开始,可以留空,留空视作从头开始
- 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
- 步长表示,依次取元素的间隔
- 步长1表示,一个个取元素
- 步长2表示,每次跳过1个元素取
- 步长N表示,每次跳过N-1个元素取
- 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)
序列[起始:结束:步长]
•起始可以省略,省略从头开始
•结束可以省略,省略到尾结束
•步长可以省略,省略步长为1(可以为负数,表示倒序执行)
集合,最主要的特点就是:
- 集合内不允许重复元素(去重)
- 集合内元素是无序的(不支持下标索引)
定义方式:
{元素, 元素, …, 元素}
编号 | 操作 | 说明 |
---|---|---|
1 | 集合.add(元素) | 集合内添加一个元素 |
2 | 集合.remove(元素) | 移除集合内指定的元素 |
3 | 集合.pop() | 从集合中随机取出一个元素 |
4 | 集合.clear() | 将集合清空 |
5 | 集合1.difference(集合2) | 得到一个新集合,内含2个集合的差集 原有的2个集合内容不变 |
6 | 集合1.difference_update(集合2) | 在集合1中,删除集合2中存在的元素 集合1被修改,集合2不变 |
7 | 集合1.union(集合2) | 得到1个新集合,内含2个集合的全部元素 原有的2个集合内容不变 |
8 | len(集合) | 得到一个整数,记录了集合的元素数量 |
遍历集合元素
- 可以使用for循环进行变量
- 不可以使用while循环,因为不支持下标索引
集合有如下特点:
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
- 数据是无序存储的(不支持下标索引)
- 不允许重复数据存在
- 可以修改(增加或删除元素等)
- 支持for循环
字典可以提供基于Key检索Value的场景实现
就像查字典一样
字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:
- 使用{}存储原始,每一个元素是一个键值对
- 每一个键值对包含Key和Value(用冒号分隔)
- 键值对之间使用逗号分隔
- Key和Value可以是任意类型的数据(key不可为字典)
- Key不可重复,重复会对原有数据覆盖
•键值对的Key和Value可以是任意类型(Key不可为字典)
•字典内Key不允许重复,重复添加等同于覆盖原有数据
•字典不可用下标索引,而是通过Key检索Value
编号 | 操作 | 说明 |
---|---|---|
1 | 字典[Key] | 获取指定Key对应的Value值 |
2 | 字典[Key] = Value | 添加或更新键值对 |
3 | 字典.pop(Key) | 取出Key对应的Value并在字典内删除此Key的键值对 |
4 | 字典.clear() | 清空字典 |
5 | 字典.keys() | 获取字典的全部Key,可用于for循环遍历字典 |
6 | len(字典) | 计算字典内的元素数量 |
•新增和更新元素的语法一致,如果Key不存在即新增,如果Key存在即更新(Key不可重复)
字典有如下特点:
- 可以容纳多个数据
- 可以容纳不同类型的数据
- 每一份数据是KeyValue键值对
- 可以通过Key获取到Value,Key不可重复(重复会覆盖)
- 不支持下标索引
- 可以修改(增加或删除更新元素等)
- 支持for循环,不支持while循环
数据容器可以从以下视角进行简单的分类:
•是否支持下标索引
•支持:列表、元组、字符串 - 序列类型
•不支持:集合、字典 - 非序列类型
•是否支持重复元素:
•支持:列表、元组、字符串 - 序列类型
•不支持:集合、字典 - 非序列类型
•是否可以修改
•支持:列表、集合、字典
•不支持:元组、字符串
列表 | 元组 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
元素数量 | 支持多个 | 支持多个 | 支持多个 | 支持多个 | 支持多个 |
元素类型 | 任意 | 任意 | 仅字符 | 任意 | Key:Value Key:除字典外任意类型 Value:任意类型 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
使用场景 | 可修改、可重复的一批数据记录场景 | 不可修改、可重复的一批数据记录场景 | 一串字符的记录场景 | 不可重复的数据记录场景 | 以Key检索Value的数据记录场景 |
1.基于各类数据容器的特点,它们的应用场景如下:
•列表:一批数据,可修改、可重复的存储场景
•元组:一批数据,不可修改、可重复的存储场景
•字符串:一串字符串的存储场景
•集合:一批数据,去重存储场景
•字典:一批数据,可用Key检索Value的存储场景
数据容器尽管各自有各自的特点,但是它们也有通用的一些操作。
首先,在遍历上:
•5类数据容器都支持for循环遍历
•列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)
功能 | 描述 |
---|---|
通用for循环 | 遍历容器(字典是遍历key) |
max | 容器内最大元素 |
min() | 容器内最小元素 |
len() | 容器元素个数 |
list() | 转换为列表 |
tuple() | 转换为元组 |
str() | 转换为字符串 |
set() | 转换为集合 |
sorted(序列, [reverse=True]) | 排序,reverse=True表示降序 得到一个排好序的列表 |