容器详解
列表
- 列表是 有序、可变 的数据类型
- 列表中可以包含 不同类型 的对象
- 列表可以由 [] 创建
- 支持 下标 及 切片 操作
列表的定义
1 | user_list = ["铁锤", "钢弹", "弹头"] |
常用方法(功能:增删改查)
为了方便我们操作列表,Python中对所有列表提供了一些的功能。
序号 | 分类 | 关键字 / 函数 / 方法 | 说明 |
---|---|---|---|
1 | 增加 | 列表.insert(索引, 数据) | 在指定位置插入数据 |
列表.append(数据) | 在末尾追加数据 | ||
列表.extend(列表2) | 将列表2 的数据追加到列表 | ||
2 | 修改 | 列表[索引] = 数据 | 修改指定索引的数据 |
3 | 删除 | del 列表[索引] | 删除指定索引的数据 |
列表.remove(数据) | 删除第一个出现的指定数据 | ||
列表.pop | 删除末尾数据 | ||
列表.pop(索引) | 删除指定索引数据 | ||
列表.clear | 清空列表 | ||
4 | 统计 | len(列表) | 列表长度 |
列表.count(数据) | 数据在列表中出现的次数 | ||
5 | 排序 | 列表.sort() | 升序排序 |
列表.sort(reverse=True) | 降序排序 | ||
列表.reverse() | 逆序、反转 |
增
追加,在原列表中尾部追加值
图例
插入,在原列表的指定索引位置插入值
图例
扩展,将一个列表中的元素逐一添加另外一个列表
图例
删除
删除
- 根据值
- 从左向右找,找到了就删除,然后停止搜索
- 没有返回值
1
2
3user_list = ["詹姆斯", "韦德", "波什"]
user_list.remove("波什")
print(user_list) # ["詹姆斯", "韦德"]弹出
- 根据 索引
- 默认弹出 尾部元素
- 有返回值
1
2
3
4
5user_list = ["詹姆斯", "韦德", "波什"]
player = user_list.pop() # 弹出列表尾部元素,并将弹出的元素返回
print(user_list, player) # ["詹姆斯", "韦德"] "波什"
player = user_list.pop(1) # 弹出索引为 1 的元素,并将弹出的元素返回
print(user_list, player) # ["詹姆斯"] "韦德"del 关键字
- 使用
del
关键字(delete
) 同样可以删除列表中元素 del
关键字本质上是用来 将一个变量从内存中删除的- 如果使用
del
关键字将变量从内存中删除,后续的代码就不能再使用这个变量了
1
2
3user_list = ["詹姆斯", "韦德", "波什"]
del user_list[1]
print(user_list) # ["詹姆斯", "波什"]在日常开发中,要从列表删除数据,建议 使用列表提供的方法
- 使用
清空 原列表
1
2
3user_list = ["詹姆斯", "韦德", "波什"]
user_list.clear()
print(user_list) # []改
- 修改动作一般是 先查,后改
- 查:索引,切片
1 | user_list = ["詹姆斯", "韦德", "波什"] |
查
- 通过索引查询
- 通过切片查询
遍历循环
- 遍历 就是 从头到尾 依次 从 列表 中获取数据
- 在 循环体内部 针对 每一个元素,执行相同的操作
- 在
Python
中为了提高列表的遍历效率,专门提供的 迭代 iteration 遍历 - 使用
for
就能够实现迭代遍历
1 | # for 循环内部使用的变量 in 列表 |
图例
其他
获取长度:
len()
1
2user_list = ["詹姆斯", "韦德", "波什"]
print( len(user_list) ) # 3反转:
reverse()
1
2
3user_list = ["詹姆斯", "韦德", "波什"]
user_list.reverse()
print(user_list) # ["波什", "韦德", "詹姆斯"]排序:
sort()
,给列表中的元素排序,默认按从小到大的顺序1
2
3
4
5num_list = [2, 3, 1, 4, -100, 10]
num_list.sort() # 默认从小到大,正序排列
print(num_list)
num_list.sort(reverse=True) # reverse=True,倒序排列
print(num_list)统计元素出现次数:
count()
1
2
3num_list = [2, 2, 3, 3, -100, 3]
print(num_list.count(3)) # 2
print(num_list.count(-100)) # 1转化:其他类型的元素转换成列表
1
2
3message = "今天手感不错进了10个三分球"
data = list(message)
print(data) # ['今', '天', '手', '感', '不', '错', '进', '了', '1', '0', '个', '三', '分', '球']应用场景
- 尽管
Python
的 列表 中可以 存储不同类型的数据 - 但是在开发中,更多的应用场景是
- 列表 存储相同类型的数据
- 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
练习题
写代码,有如下列表,按照要求实现每一个功能。
1
li = ["alex", "jerry", "tom", "barry", "wall"]
- 计算列表的 长度 并输出
- 请通过步长获取索引为 偶数 的所有值,并打印出获取后的列表
- 列表中追加元素 mike,并输出添加后的列表
- 请在列表的第 1个位置插入元素 Tony ,并输出添加后的列表
- 请修改列表第 2 个位置的元素为 Kelly,并输出修改后的列表
- 请将列表 l2 = [1,”a”,3,4,”heart”] 的每一个元素追加到列表 li 中,并输出添加后的列表
- 请删除列表中的元素 ”barry”,并输出删除后的列表
- 请删除列表中的第 2 个元素,并 输出 删除元素后的列表
元组
元组的定义 tuple
- 通过
()
创建元组 - 元组是有序的、不可变类型
- 与列表类似,作用于列表的操作,绝大数也可以作用于元组
- 一般用于存储一些在程序中不应该被修改的一系列值
常见操作
由于元组不可变的特性,所有没有 增、删、改 操作
1 | atuple = (10, 30, 25, 88) # 定义一个元组 |
注意:单元素元组的定义
如果一个元组中只有一个元素,那么创建该元组时,需要加上一个 逗号,否则创建失败
1 | a = ("hello") # 没加逗号的情况 |
总结
字典
字典的定义 dict
dictionary
(字典) 是 除列表以外Python
之中 最灵活 的数据类型- 字典同样可以用来 存储多个数据
- 通常用于存储 描述一个
物体
的相关信息
- 通常用于存储 描述一个
- 和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
- 字典用
{}
定义 - 字典使用 键值对 存储数据,键值对之间使用
,
分隔- 键
key
是索引 - 值
value
是数据 - 键 和 值 之间使用
:
分隔 - 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
- 键
基本操作
创建字典
- 通过
{}
操作符创建字典
案例
1 | dict01 = {"name": "zhangsan", "age": 18} |
常见方法
访问字典:查询
字典是映射类型,意味着它没有下标,访问字典中的值需要使用相应的键
通过键 (key)
,访问字典
1 | info = {"age":12, "status":True, "name":"nfx"} |
获取所有的键
通过 字典对象.keys()
获取
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
遍历:分别打印出每个 key
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
获取所有的值
通过 字典对象.values()
获取
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
遍历:分别打印出每个 value
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
获取所有键值对
通过 字典对象.items()
获取
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
遍历:分别打印出每个 k:v
对
1 | for item in info.items(): |
更新键值
通过 字典对象.update()
修改或添加
1 | info = {"age":12, "status":True} |
或者通过 字典对象[key]
修改或添加
1 | info = {"age":12, "status":True} |
删除操作
pop()
,弹出指定键对应的元素并将弹出的元素返回
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
del:删除指定的键值对,不返回数据
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
清空字典:clear()
1 | info = {"age":12, "status":True, "name":"nfx","email":"xx@live.com"} |
其他
字典相关函数
len():返回字典中元素的数目
hash():不是为字典设计,可以判断对象是否可以作为字典的键
- hash() 可以判断对象是否可以作为字典的键:
- 可变对象不能作为字典的key,例如:列表和字典;
- 不可变对象可以作为字典的键,例如:数值,字符串,和元组;
- hash() 可以判断对象是否可以作为字典的键:
练习 2:模拟用户登录信息系统
需求
- 支持新用户注册(添加),新用户名和密码注册到字典中
- 支持老用户登陆(查询),用户名和密码正确提示登陆成功
- 主程序通过循环询问,进行何种操作,根据用户的选择,执行注册或是登陆操作
1 | userdb = {} # 定义一个字典,用于存储用户名和密码 |
集合 set
- 集合与元组和列表相似都用于做容器,在内部可以放一些子元素
- 集合有三特殊特点:
子元素不重复
、子元素必须可哈希
、无序
。
提示:目前可哈希的数据类型 int/str/tuple
;不可哈希的类型 dict/list/set
。
常用方法
创建集合
1 | set01 = {1, 2, 99, 18} |
集合与字典虽然都是用{}
括号,但字典内部是键值对,而集合内部直接是值。
集合类型操作符
集合支持用
in
和not in
操作符检查成员能够通过
len()
检查集合大小能够使用
for
迭代集合成员不能取切片,没有键
1 | set01 = {1, 2, 3, 4} |
添加元素 add()
1 | data = {"刘嘉玲", '关之琳', "王祖贤"} |
删除元素
remove()
- 从集合中移除一个元素;它 必须 是一个成员。
- 如果元素不是成员,则引发 KeyError。
1 | data = {"刘嘉玲", '关之琳', "王祖贤"} |
交集
图例

1 | s1 = {"刘能", "赵四", "⽪⻓⼭"} |
并集
图例

1 | s1 = {"刘能", "赵四", "⽪⻓⼭"} |
差集
图例

1 | s1 = {"刘能", "赵四", "⽪⻓⼭"} |
图例

1 | s1 = {"刘能", "赵四", "⽪⻓⼭"} |
其他
其他类型如果想要转换为集合类型,可以通过
set
进行转换,并且如果数据有重复则 自动去重。提示:
int/list/tuple/dict
都可以转换为集合。
1 | v1 = [11, 22, 33, 11, 3, 99, 22] |
练习 3:比较文件内容
需求
- 有两个文件:a.log 和 b.log
- 两个文件中有大量重复内容
- 取出只有在 b.log 中存在的行
1 | # 定义变量,指定要操作的文件路径 |