数据存储容器
一种可以容纳多份数据的数据类型 (容器),容纳的每一份数据称之为1个元素,每一个元素都可以是任意类型的数据,如: 字符串、数字、布尔等。

列表(list)
列表是数据容器中的一类,是一次性可以存储多个数据(元素)的
定义
python
#列表名称 = [元素1,元素2,元素3,元素4,元素5,....]
s = [54,23,123,45,78,234]
#创建方式
lst1 = [1, 2, 3]
lst2 = list("abc") # ['a','b','c']
lst3 = [x**2 for x in range(3)] # [0,1,4] 推导式
lst4 = [] # 空列表
#常用操作
lst = [10, 20, 30]
lst[0] # 10 索引(从0开始,支持负索引)
lst[1:3] # [20, 30] 切片(左闭右开,返回新列表)
lst[::2] # [10, 30] 步长
len(lst) # 3
10 in lst # True 成员检测
lst[0] = 99 # 修改元素
del lst[1] # 按索引删除特点
- 可变:元素可增删改。
- 有序:元素按插入顺序存储,支持索引。
- 可重复:允许重复元素。
- 异构:可存放任意类型对象
核心方法
| 方法 | 作用 | 样例 |
|---|---|---|
| append(x) | 末尾追加一个元素 | list.append(10) |
| insert(i, x) | 在索引 i 处插入元素 | list.insert(1,5) |
| remove(x) | 移除第一个值等于 x 的元素 | list.remove(x) |
| pop(i=-1) | 移除并返回索引 i 的元素,默认最后一个 | list.pop() |
| extend(iter) | 用可迭代对象扩展列表 | list.extend() |
| index(x) | 返回第一个值为 x 的索引 | list.index() |
| count(x) | 统计 x 出现的次数 | list.count() |
| sort(key, reverse) | 原地排序(稳定) | list.sort() |
| reverse() | 原地反转列表 | list.reverse() |
| clear() | 清空列表 | list.clear() |
sort()返回None,内置函数sorted(lst)返回新列表。- 列表支持
+(拼接)和 (重复)。 - 列表推导式:
[表达式 for 变量 in 可迭代 if 条件]是快速生成列表的优雅方式。
练习
🤔需求1:将如下多个列表合并为一个列表,并去重重复元素,排好序(升序)后输出到控制台。
python
# 1. 将如下多个列表合并为一个列表,并去重重复元素,排好序(升序)后输出到控制台。
list1 = ['M', 'A', 'C', 'E', 'F', 'G', 'H', 'L', 'N', 'I', 'J', 'K', 'O']
list2 = ['X', 'Z', 'T', 'Y', 'D', 'E', 'F', 'G']
list3 = ['W', 'A', 'S', 'D']
merge_list = [*list1, *list2, *list3]
print("合并后的原始列表为: ", merge_list)
new_list = []
for item in merge_list:
if item not in new_list:
new_list.append(item)
print("去重后的列表为: ", new_list)
字符串(str)
字符串是字符的容器,一个字符串中可以存放任意数量的字符,如:“python”
特性
- 不可变:一旦创建,内容不能修改。
- 有序:字符序列,支持索引和切片。
- Unicode:Python 3 字符串是 Unicode 码点序列。
创建方式
python
s1 = "hello"
s2 = 'world'
s3 = """多行
文本"""
s4 = str(123) # '123'
s5 = '' # 空字符串常用操作与关键方法(均为返回新字符串,原字符串不变)
| 方法/操作 | 作用 |
|---|---|
| s[i] | 取索引 i 的字符 (1 为最后一个) |
| s[start:stop:step] | 切片 |
| len(s) | 字符长度 |
| s.super()/s,lower() | 全大写 / 全小写 |
| s.strip(chars) | 去除两端指定字符(默认空白) |
| s.split(sep) | 按分隔符分割成列表 |
| s.join(iter) | 用字符串连接可迭代对象中的元素(如 '-'.join(['a','b']) → 'a-b') |
| s.replace(old, new) | 替换子串(不修改原串) |
| s.find(sub) | 返回子串首次出现的索引,未找到返回 1 |
| s.startswith() | 检查字符串以指定字串开头,返回布尔值 |
| s.endswith() | 检查字符串以指定字串结尾,返回布尔值 |
- 不支持直接通过索引赋值(如
s[0]='H'会报错),需构建新串。 - 成员检查:
'ell' in "hello"→True。 - 遍历字符串即为遍历每个字符
练习
🤔输入一个字符串, 判断该字符串是否是回文(两边对称)
python
# 1. 输入一个字符串, 判断该字符串是否是回文(两边对称) 。 "黄山落叶松叶落山黄" "上海自来水来自海上"
s = input("请输入一个字符串: ")
# 方式一(双指针法): 思路是从两边向中间遍历, 基于索引获取两边字符对比, 如果两边的字符不相等, 则不是回文, 否则是回文。
left = 0 # 左索引
right = len(s) - 1 # 右索引
flag = True
while left < right:
if s[left] != s[right]:
flag = False
break
left += 1
right -= 1
if flag:
print(f"'{s}' 是回文")
else:
print(f"'{s}' 不是回文")
# 方式二:
if s == s[::-1]:
print(f"'{s}' 是回文")
else:
print(f"'{s}' 不是回文")元组(tuple)
元祖是不可变的序列,类似于列表,但创建后不能修改
定义
python
# 定义元祖
元祖名称 = (元素1,元素2,...)
# 定义空元祖
元祖名称 = ()
元祖名称 = tuple()
#创建元祖
t1 = (1, 2, 3)
t2 = 1, 2, 3 # 括号可省略
t3 = tuple("abc") # ('a','b','c')
t4 = () # 空元组
t5 = (5,) # 单元素元组必须有逗号
#常用操作
t = (10, 20, 30)
t[0] # 10
t[1:3] # (20, 30)
len(t) # 3
20 in t # True
t.count(10) # 1
t.index(20) # 1- 支持
+、、成员检测、循环遍历。 - 常用于函数多返回值:
return a, b实际上返回一个元组。 - 序列解包:
x, y, z = (1, 2, 3)。
特点
- 不可变:元素不能修改、增加或删除。
- 有序:支持索引、切片。
- 可重复,可存放异构数据。
- 常作为不可变列表使用,可散列(元素全可散列时),因此可用于字典的键或集合的元素。
元祖-组包与解包

注意: 在元祖解包时,* 表示收集剩余的所有元素,允许我们处理不确定数量的元素
集合(set)
集合(set)是一种无序的,不可重复,可修改的数据容器
创建方式
python
s1 = {1, 2, 3}
s2 = set([1, 2, 2, 3]) # {1,2,3} 自动去重
s3 = set() # 空集合(注意 {} 是空字典)特性
- 可变(
set内置类型)或 不可变(frozenset)。 - 无序:元素没有固定顺序(不可索引)。
- 唯一性:自动去重,不允许重复元素。
- 元素必须为可散列(不可变类型,如数、字符串、元组等)。

集合运算
| 操作 | 示例(a = {1,2}, b = {2,3}) | 说明 |
|---|---|---|
| a | b | |
| a & b | 交集 | |
| a - b | 差集(a有b无) | |
| a ^ b | 对称差集(不同时属于两者) |
字典(dict)
Python中的字典,里面存储的是键值对(key :value)类型的数据,可以根据key找到对应的值
创建方式
python
d1 = {'a': 1, 'b': 2}
d2 = dict(a=1, b=2)
d3 = dict([('a',1), ('b',2)])
d4 = {} # 空字典
d5 = {x: x**2 for x in range(3)} # 字典推导式 {0:0, 1:1, 2:4}特性
- 可变:可增删改键值对。
- 键唯一,且必须为可散列类型(字符串、数字、含不可变元素的元组等)。
- 值可以是任意类型。
- 自 Python 3.7 起保留插入顺序(官方保证)

综合案例
练习
🤔
开发一个教务管理系统,在该系统中可以维护和管理学员的成绩信息,具体需求如下:
- 添加学生信息:根据提示录入学生姓名、语文、数学、英语成绩,录入完成保存到系统中。
- 修改学生信息:要求输入要修改的学生姓名,然后再提示输入语文、数学、英语成绩,输入完成后修改学员信息。
- 删除学生信息:要求输入要删除的学生姓名,根据姓名删除学生信息。
- 查询学生信息:要求输入要查询的学生姓名,根据姓名查询学生信息并输出。
- 列出所有学生:遍历所有学生信息并输出。
- 统计班级成绩:统计班级语文、数学、英语成绩的最高分、最低分、平均分,以及语文、数学、英语最高分和最低分的学员姓名。
- 退出系统。
python
"""
案例:
开发一个教务管理系统,在该系统中可以维护和管理学员的成绩信息,具体需求如下:
1. 添加学生信息:根据提示录入学生姓名、语文、数学、英语成绩,录入完成保存到系统中。
2. 修改学生信息:要求输入要修改的学生姓名,然后再提示输入语文、数学、英语成绩,输入完成后修改学员信息。
3. 删除学生信息:要求输入要删除的学生姓名,根据姓名删除学生信息。
4. 查询学生信息:要求输入要查询的学生姓名,根据姓名查询学生信息并输出。
5. 列出所有学生:遍历所有学生信息并输出。
6. 统计班级成绩:统计班级语文、数学、英语成绩的最高分、最低分、平均分,以及语文、数学、英语最高分和最低分的学员姓名。
7. 退出系统。
"""
menu = """
# # # # # # # # # # # # # # # # # # # # # # # # # # 【菜单】 # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 1. 添加学生信息 2. 修改学生信息 3. 删除学生信息 4. 查询学生信息 5. 列出所有学生 6. 统计班级成绩 7. 退出系统 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
"""
print("欢迎使用教务管理系统 ~")
student_scores = {}
while True:
# 1. 制作菜单
print(menu)
# 2. 执行的具体操作
choice = input("请选择要执行的操作(1-7): ")
match choice:
case "1": # 添加学生信息
student_name = input("请输入学生姓名: ")
chinese_score = float(input("请输入语文成绩: "))
math_score = float(input("请输入数学成绩: "))
english_score = float(input("请输入英语成绩: "))
# 如果学生存在, 则不执行添加, 提示信息
if student_name in student_scores:
print("该学生已存在, 请重新选择 ~")
else:
student_scores[student_name] = {"chinese": chinese_score, "math": math_score, "english": english_score}
print("学生信息添加完毕 ~")
case "2": # 修改学生信息
student_name = input("请输入要修改的学生姓名: ")
# 如果学生不存在, 则提示错误信息, 重新选择
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
continue
chinese_score = float(input("请输入语文成绩: "))
math_score = float(input("请输入数学成绩: "))
english_score = float(input("请输入英语成绩: "))
student_scores[student_name] = {"chinese": chinese_score, "math": math_score, "english": english_score}
print("学生信息修改完毕 ~")
case "3": # 删除学生信息
student_name = input("请输入要删除的学生姓名: ")
# 如果学生不存在, 则提示错误信息, 重新选择
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
else:
del student_scores[student_name]
print("学生信息删除完毕 ~")
case "4": # 查询学生信息
student_name = input("请输入要查询的学生姓名: ")
# 如果学生不存在, 则提示错误信息
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
else:
student_info = student_scores[student_name]
print(f"学生姓名: {student_name}, 语文成绩: {student_info['chinese']}, 数学成绩: {student_info['math']}, 英语成绩: {student_info['english']}")
case "5": # 列出所有学生
for student_name in student_scores.keys():
student_info = student_scores[student_name]
print(f"学生姓名: {student_name}, 语文成绩: {student_info['chinese']}, 数学成绩: {student_info['math']}, 英语成绩: {student_info['english']}")
case "6": # 统计班级成绩
if not student_scores:
print("系统中暂无学生信息,请先添加学生 ~")
continue
# 初始化统计变量
chinese_scores = []
math_scores = []
english_scores = []
# 收集所有成绩
for student_name, scores in student_scores.items():
chinese_scores.append(scores['chinese'])
math_scores.append(scores['math'])
english_scores.append(scores['english'])
# 计算最高分、最低分、平均分
chinese_max = max(chinese_scores)
chinese_min = min(chinese_scores)
chinese_avg = sum(chinese_scores) / len(chinese_scores)
math_max = max(math_scores)
math_min = min(math_scores)
math_avg = sum(math_scores) / len(math_scores)
english_max = max(english_scores)
english_min = min(english_scores)
english_avg = sum(english_scores) / len(english_scores)
# 找出最高分和最低分的学生
chinese_max_students = [name for name, scores in student_scores.items() if scores['chinese'] == chinese_max]
chinese_min_students = [name for name, scores in student_scores.items() if scores['chinese'] == chinese_min]
math_max_students = [name for name, scores in student_scores.items() if scores['math'] == math_max]
math_min_students = [name for name, scores in student_scores.items() if scores['math'] == math_min]
english_max_students = [name for name, scores in student_scores.items() if scores['english'] == english_max]
english_min_students = [name for name, scores in student_scores.items() if scores['english'] == english_min]
# 输出统计结果
print("===== 班级成绩统计 =====")
print(f"语文 - 最高分: {chinese_max}, 最低分: {chinese_min}, 平均分: {chinese_avg:.2f}")
print(f" 最高分学生: {chinese_max_students}")
print(f" 最低分学生: {chinese_min_students}")
print(f"数学 - 最高分: {math_max}, 最低分: {math_min}, 平均分: {math_avg:.2f}")
print(f" 最高分学生: {math_max_students}")
print(f" 最低分学生: {math_min_students}")
print(f"英语 - 最高分: {english_max}, 最低分: {english_min}, 平均分: {english_avg:.2f}")
print(f" 最高分学生: {english_max_students}")
print(f" 最低分学生: {english_min_students}")
print("========================")
case "7": # 退出系统
print("Bye ~")
break
case _: # 匹配其他所有情况
print("非法操作, 不支持!!!")