Python数据容器
列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
1. 数据容器:list(列表)
1.1 列表的定义
基本语法:
列表内的每一个数据,称之为元素
- 以 [] 作为标识
- 列表内每一个元素之间用, 逗号隔开
1.2 列表的定义方式
注意:
列表可以一次存储多个数据
,且可以为不同的数据类型,支持嵌套
。
1.3 列表的下标(索引) - 反向
或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3…)
如图,从后向前,下标索引为:-1、-2、-3,依次递减:
1.4 嵌套列表的下标(索引)
如果列表是嵌套的列表,同样支持下标索引
如下案例:
1.5 列表的常用功能(方法)
- 查找某元素的下标
功能:查找指定元素在列表的下标,如果找不到,报错ValueError。
语法:列表.index(元素)
- 修改特定位置(索引)的元素值
语法:列表[下标] = 值
可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行重新赋值(修改)。 - 插入元素
语法:列表.insert(下标, 元素)
,在指定的下标位置,插入指定的元素。 - 追加元素
语法:列表.append(元素)
,将指定元素,追加到列表的尾部 - 追加元素方式2
语法:列表.extend(其它数据容器)
,将其它数据容器的内容取出,依次追加到列表尾部。 - 删除元素
语法1:del 列表[下标]
语法2:列表.pop(下标)
- 删除某元素在列表中的第一个匹配项
语法:列表.remove(元素)
- 清空列表内容
语法:列表.clear()
- 统计某元素在列表内的数量
语法:列表.count(元素)
- 统计列表内元素个数
语法:len(列表)
可以得到一个int数字,表示列表内的元素数量。
1.6 列表的特点
- 可以容纳多个元素(上限为2**63-1、9223372036854775807个)
- 可以容纳不同类型的元素(混装)
- 数据是有序存储的(有下标序号)
- 允许重复数据存在
- 可以修改(增加或删除元素等)
2. list(列表)的遍历
2.1 列表的遍历 - for循环
2.2 列表的遍历 - while循环
3. 数据容器:tuple(元组)
元组同列表一样,都是可以封装多个、不同类型的元素在内。但最大的不同点在于:元组一旦定义完成,就不可修改
。所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了。
3.1 定义元组
元组定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
语法如下:
举例如下:
注意:元组只有一个数据,这个数据后面要添加逗号
。
3.2 元组的相关操作
注意:
元组由于不可修改的特性,所以其操作方法非常少。
3.3 元组的相关操作 - 注意事项
- 不可以修改元组的内容,否则会直接报错
- 可以修改元组内的list的内容(修改元素、增加、删除、反转等)
- 不可以替换list为其它list或其它类型
3.4 元组的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
- 数据是有序存储的(下标索引)
- 允许重复数据存在
不可以修改(增加或删除元素等)
- 支持for循环
多数特性和list一致,不同点在于不可修改的特性。
4. 数据容器:str(字符串)
4.1 字符串的说明
和其它容器如:列表、元组一样,字符串也可以通过下标进行访问。从前向后,下标从0开始,从后向前,下标从-1开始
。
同元组一样,字符串是一个无法修改的数据容器
。
4.2 字符串常用操作汇总
4.3 字符串的特点
作为数据容器,字符串有如下特点:
只可以存储字符串
- 长度任意(取决于内存大小)
- 支持下标索引
- 允许重复字符串存在
不可以修改(增加或删除元素等)
- 支持for循环
5. 数据容器的切片
序列是指:内容连续、有序,可使用下标索引的一类数据容器
。列表、元组、字符串,均可以可以视为序列。
序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求。
5.1 序列的常用操作 - 切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作。
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列。
- 起始下标表示从何处开始,可以留空,留空视作从头开始
- 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
- 步长表示,依次取元素的间隔
- 步长1表示,一个个取元素
- 步长2表示,每次跳过1个元素取
- 步长N表示,每次跳过N-1个元素取
- 步长为负数表示,反向取(注意,
起始下标和结束下标也要反向标记
)
注意:此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)。
5.2 序列的切片演示
6. 数据容器:set(集合)
6.1 基本语法:
和列表、元组、字符串等定义基本相同:
- 列表使用:[]
- 元组使用:()
- 字符串使用:“”
- 集合使用:{}
6.2 集合的常用操作
6.3 集合的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
数据是无序存储的(不支持下标索引)
不允许重复数据存在
- 可以修改(增加或删除元素等)
- 支持for循环
7. 数据容器:dict(字典、映射)
7.1 字典的定义
字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:
7.2 循环字典
方法1:循环key
```python
scores = {'zhangsan':98, 'lisi':89, 'maishu':96}
for name in scores:
print(f'{name}:{scores[name]}')
```
默认情况下,循环字典,`其实是循环的字典的keys`,所以name就是一个个key。如果需要访问value,`可以通过scores[name]`来取用。
和下面效果一样:
for name in scores.keys():
print(f'{name}:{scores[name]}')
方法2:循环key和value
for name, score in scores.items():
print(f'{name}:{score}')
方法3:打印序号
scores = {'zhangsan':98, 'lisi':89, 'maishu':96}
for i, (name, score) in enumerate(scores.items()):
print(i, name, score)
先用items()
函数转成元组的列表,再使用enumerate
函数加上序号。
注意,因为是元组,for的变量中一定要加上括号:i, (name, score)
。Python只会做简单的自动开包,这里还有个变量i,它就不会自动开包,它只是单个变量元组,需要加上括号。
7.3 字典的常用操作
7.4 字典的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据
每一份数据是KeyValue键值对
可以通过Key获取到Value,Key不可重复(重复会覆盖)
- 不支持下标索引
- 可以修改(增加或删除更新元素等)
- 支持for循环,不支持while循环
8. 数据容器的通用操作
8.1 数据容器对比总结
数据容器可以从以下视角进行简单的分类:
- 是否支持下标索引
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型 - 是否支持重复元素:
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型 - 是否可以修改
支持:列表、集合、字典
不支持:元组、字符串
数据容器特点对比
基于各类数据容器的特点,它们的应用场景如下:
- 列表:一批数据,
可修改、可重复的存储场景
- 元组:一批数据,
不可修改、可重复的存储场景
- 字符串:
一串字符串的存储场景
- 集合:一批数据,
去重存储场景
- 字典:一批数据,
可用Key检索Value的存储场景
8.2 数据容器的通用统计功能
8.3 容器的通用转换功能
8.4 容器通用排序功能
8.5 容器通用功能总览
Python函数进阶
1 函数多返回值
- 按照返回值的顺序,写对应顺序的多个变量接收即可
- 变量之间用逗号隔开
- 支持不同类型的数据return
2 函数多种传参方式
2.1 函数参数种类
使用方式上的不同, 函数有4中常见参数使用方式:
- 位置参数
- 关键字参数
- 缺省参数
- 不定长参数
位置参数
位置参数:调用函数时根据函数定义的参数位置来传递参数。
注意:
传递的参数和定义的参数的顺序及个数必须一致。
关键字参数
关键字参数:函数调用时通过“键=值”形式传递参数
。
作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
注意:
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
缺省参数
缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用
)。
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值
。
注意:
函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值。
不定长参数
不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
作用: 当调用函数时不确定参数个数时, 可以使用不定长参数。
不定长参数的类型:
- 位置传递
- 关键字传递
位置传递(元组)
注意:
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型
,这就是位置传递。
关键字传递(字典)
注意:
参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典
.
3 匿名函数
3.1 函数作为参数传递
3.2 lambda匿名函数
语法如下:
lambda 传入参数:函数体(一行代码)