参考资料:
学习数据容器,就是为了批量存储或批量使用多份数据
数据容器入门
Python 中的数据容器: 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为 1 个元素 每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
数据容器根据特点的不同,如:
- 是否支持重复元素
- 是否可以修改
- 是否有序 分为 5 类,分别是: 列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
list (列表)
列表的定义
基本语法
列表内的每一个数据,称之为元素
- 以
[]
作为标识 - 列表内每个元素之间用
,
隔开
列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套
列表的下标索引
列表中的每一个元素,都有其位置下标索引,从前向后的方向,从 0 开始,依次递增
反向索引,从后向前:从 -1 开始,依次递减(-1、-2、-3…)
嵌套的列表,同样支持下标索引
列表的常用操作
列表除了可以:
- 定义
- 使用下标索引获取值 以外,列表也提供了一系列功能:
- 插入元素
- 删除元素
- 清空列表
- 修改元素
- 统计元素个数 等等功能,这些功能我们都称之为:列表的方法
在 Python 中,如果将函数定义为 class(类)的成员,那么函数会称之为:方法
方法和函数功能一样, 有传入参数,有返回值,只是方法的使用格式不同:
- 函数的使用:
num = add(1, 2)
- 方法的使用:
操作 | 作用 |
---|---|
列表.append(元素) | 向列表中追加一个元素 |
列表.extend(容器) | 将数据容器的内容依次取出,追加到列表尾部 |
列表.insert(下标, 元素) | 在指定下标处,插入指定的元素 |
del 列表 [下标] | 删除列表指定下标元素 |
列表.pop(下标) | 删除列表指定下标元素 |
列表.remove(元素) | 从前向后,删除此元素第一个匹配项 |
列表.clear() | 清空列表 |
列表.count(元素) | 统计此元素在列表中出现的次数 |
列表.index(元素) | 查找指定元素在列表的下标,找不到报错 ValueError |
len(列表) | 统计容器内有多少元素 |
列表特点
- 可以容纳多个元素(上限为 2^63-1、9223372036854775807 个)
- 可以容纳不同类型的元素(混装)
- 数据是有序存储的(有下标序号)
- 允许重复数据存在
- 可以修改(增加或删除元素等)
列表的遍历
使用循环语句遍历列表
示例代码:
列表的遍历 - while 循环
列表的遍历 - for 循环
练习案例:取出列表内的偶数 定义一个列表,内容是:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 遍历列表,取出列表内的偶数,并存入一个新的列表对象中
tuple (元组)
元组同列表一样,都是可以封装多个、不同类型的元素在内。 但最大的不同点在于: 元组一旦定义完成就不可修改 注意:即使元组只有一个数据,这个数据后面也要添加逗号
元组相关操作
方法 | 作用 |
---|---|
index() | 查找某个数据,如果数据存在返回对应的下标,否则报错 |
count() | 统计某个数据在当前元组出现的次数 |
len(元组) | 统计元组内的元素个数 |
元组的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
- 数据是有序存储的(下标索引)
- 允许重复数据存在
- 不可以修改(增加或删除元素等)
- 支持 for 循环
str (字符串)
字符串是字符的容器,一个字符串可以存放任意数量的字符。 和其它容器如:列表、元组一样,字符串也可以通过下标进行访问
- 从前向后,下标从 0 开始
- 从后向前,下标从 -1 开始
同元组一样,字符串是一个:无法修改的数据容器。
所以:
- 修改指定下标的字符 (如:
字符串[0] = “a”
) - 移除特定下标的字符 (如:
del 字符串[0]
、字符串.remove()
、字符串.pop()
等) - 追加字符等 (如:
字符串.append()
) - 均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改
字符串常用操作总结
操作 | 说明 |
---|---|
字符串 [下标] | 根据下标索引取出特定位置字符 |
字符串.index(字符串) | 查找给定字符的第一个匹配项的下标 |
字符串.replace(字符串 1, 字符串 2) | 将字符串内的全部字符串 1,替换为字符串 2 不会修改原字符串,而是得到一个新的 |
字符串.split(字符串) | 按照给定字符串,对字符串进行分隔 不会修改原字符串,而是得到一个新的列表 |
字符串.strip() 字符串.strip(字符串) | 移除首尾的空格和换行符或指定字符串 |
字符串.count(字符串) | 统计字符串内某字符串的出现次数 |
len(字符串) | 统计字符串的字符个数 |
字符串遍历
字符串特点
- 只可以存储字符串
- 长度任意(取决于内存大小)
- 支持下标索引
- 允许重复字符串存在
- 不可以修改(增加或删除元素等)
- 支持 for 循环
练习案例:分割字符串
数据容器(序列)的切片
序列是指:内容连续、有序,可使用下标索引的一类数据容器。列表、元组、字符串,均可以可以视为序列。
语法:序列[起始下标:结束下标:步长]
步长表示,依次取元素的间隔
- 步长 1 表示,一个个取元素
- 步长 2 表示,每次跳过 1 个元素取
- 步长 N 表示,每次跳过 N-1 个元素取 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)
练习案例:有字符串:” 万过薪月,员序程马黑来,nohtyP 学 “,请使用学过的任何方式,得到 ” 黑马程序员 “
可用方式参考:
- 倒序字符串,切片取出或切片取出,然后倒序
- split 分隔 ”,” replace 替换 ” 来 ” 为空,倒序字符串
set (集合)
集合不支持元素的重复(自带去重功能)、并且内容无序
基本语法
因为集合是无序的,所以集合不支持:下标索引访问,但允许修改。
集合常用操作总结
操作 | 说明 |
---|---|
集合.add(元素) | 集合内添加一个元素 |
集合.remove(元素) | 移除集合内指定的元素 |
集合.pop() | 从集合中随机取出一个元素 |
集合.clear() | 将集合清空 |
集合 1.difference(集合 2) | 得到一个新集合,内含 2 个集合的差集 原有的 2 个集合内容不变 |
集合 1.difference_update(集合 2) | 在集合 1 中,删除集合 2 中存在的元素 集合 1 被修改,集合 2 不变 |
集合 1.union(集合 2) | 得到 1 个新集合,内含 2 个集合的全部元素 原有的 2 个集合内容不变 |
len(集合) | 得到一个整数,记录了集合的元素数量 |
集合同样支持使用 for 循环遍历。要注意:集合不支持下标索引,所以也就不支持使用 while 循环。
练习:信息去重
有如下列表对象:my_list = ['黑马程序员', '传智播客', '黑马程序员', '传智播客', 'itheima', 'itcast', 'itheima', 'itcast', 'best']
请:
- 定义一个空集合
- 通过 for 循环遍历列表
- 在 for 循环中将列表的元素添加至集合
- 最终得到元素去重后的集合对象,并打印输出
dict (字典、映射)
使用字典,实现用 key 取出 value 的操作
基本语法
- 使用
{}
存储原始,每一个元素是一个键值对 - 每一个键值对包含 key 和 Value(用冒号分隔)
- 键值对之间使用逗号分隔
- key 和 value 可以是任意类型的数据(key 不可为字典)
- key 不可重复,重复会对原有数据覆盖
字典数据的获取
- 使用
[key]
获取 value - 字典的内容可嵌套,获取嵌套字典的数据一次写
[key][key]...
(获取到第几层写几个)
字典的常用操作总结
操作 | 说明 |
---|---|
字典 [Key] | 获取指定 Key 对应的 Value 值 |
字典 [Key] = Value | 添加或更新键值对 |
字典.pop(Key) | 取出 Key 对应的 Value 并在字典内删除此 Key 的键值对 |
字典.clear() | 清空字典 |
字典.keys() | 获取字典的全部 Key,可用于 for 循环遍历字典 |
len(字典) | 计算字典内的元素数量 |
练习:升职加薪:有如下员工信息,请使用字典完成数据的记录。并通过 for 循环,对所有级别为 1 级的员工,级别上升 1 级,薪水增加 1000 元
不同数据容器特点对比
列表 | 元组 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
元素数量 | 支持多个 | 支持多个 | 支持多个 | 支持多个 | 支持多个 |
元素类型 | 任意 | 任意 | 仅字符 | 任意 | Key:Value Key:除字典外任意类型 Value:任意类型 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
使用场景 | 可修改、可重复的一批数据记录场景 | 不可修改、可重复的一批数据记录场景 | 一串字符的记录场景 | 不可重复的数据记录场景 | 以 Key 检索 Value 的数据记录场景 |
数据容器的通用操作
功能 | 描述 |
---|---|
通用 for 循环 | 遍历容器(字典是遍历 key) |
max | 容器内最大元素 |
min() | 容器内最小元素 |
len() | 容器元素个数 |
list() | 转换为列表 |
tuple() | 转换为元组 |
str() | 转换为字符串 |
set() | 转换为集合 |
sorted(序列, [reverse=True]) | 排序,reverse=True 表示降序 得到一个排好序的列表 |
拓展 字符串大小比较
- ASCII 码表
- 按位比较