2026-09-23
Python 入门系列(六):列表与元组——批量管理数据
列表是一排编号的储物柜(下标从 0 开始!)。学习增删改查、切片、遍历与常用统计,区分可变列表与不可变元组,完成待办清单练习。
列表与元组:批量管理数据
预计学习时间:55 分钟 · 本系列第 6 / 10 课
一、一个变量装不下一个班级
记录全班 50 个人的分数,难道定义 score1、score2……score50?当然不。**列表(List)**让你用一个变量装一串数据。
**核心比喻:列表是一排编号的储物柜。**每个柜子有编号(从 0 开始数!),随时往柜子里放东西、取东西、换东西。
fruits = ["苹果", "香蕉", "橘子", "西瓜"]
┌────┬────┬────┬────┐
│苹果│香蕉│橘子│西瓜│
└────┴────┴────┴────┘
[0] [1] [2] [3] ← 编号(下标)从 0 开始!
最后一个也可以用 [-1] 表示
二、列表的增删改查
fruits = ["苹果", "香蕉", "橘子"]
# 查 —— 用下标访问
print(fruits[0]) # 苹果(第一个)
print(fruits[-1]) # 橘子(-1 = 最后一个)
# 改 —— 下标定位后直接赋值
fruits[1] = "葡萄"
# 增
fruits.append("西瓜") # 追加到末尾(最常用)
fruits.insert(0, "草莓") # 插入到下标 0 的位置
# 删
fruits.remove("橘子") # 按值删除
last = fruits.pop() # 删除并返回最后一个
print(fruits, "长度:", len(fruits))
苹果
橘子
['草莓', '苹果', '葡萄'] 长度: 3
三、切片:一次取一段
nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4]) # [1, 2, 3] 含头不含尾
print(nums[:3]) # [0, 1, 2] 从头取到下标2
print(nums[3:]) # [3, 4, 5] 从下标3取到尾
print(nums[::2]) # [0, 2, 4] 每隔一个取
print(nums[::-1]) # [5, 4, 3, 2, 1, 0] 反转!
和 range 一样记住口诀:含头不含尾。
四、for 遍历列表:批量处理
scores = [85, 92, 58, 76]
for s in scores:
print("分数:", s, "→", "及格" if s >= 60 else "不及格")
# 常用统计函数
print(max(scores), min(scores), sum(scores), sum(scores)/len(scores))
分数: 85 → 及格
分数: 92 → 及格
分数: 58 → 不及格
分数: 76 → 及格
92 58 311 77.75
五、常用方法速查
append(x) 末尾加 | insert(i, x) 插入 | remove(x) 按值删
pop() 弹出末尾 | sort() 原地排序 | reverse() 反转
count(x) 数个数 | index(x) 查下标 | "苹果" in fruits 判断存在
六、元组:上了锁的列表
元组(Tuple)用圆括号,创建后不能修改——适合存不该被改的数据,如坐标、星期几:
point = (3, 5)
print(point[0]) # 3,可以读
point[0] = 9 # 报错 TypeError!元组不可修改
# 解包:一次接收多个值,非常好用
x, y = point
print(x, y) # 3 5
怎么选?数据会增删改 → 用列表;数据固定不变、只读 → 用元组(更安全)。
七、避坑指南
- ❌
fruits[4]当列表只有 3 个元素 →IndexError: list index out of range。先len()看看长度 - ❌
nums = (1, 2, 3)想排序修改 —— 元组没有这些方法 - ❌
b = a以为复制了列表 —— 其实两个名字指向同一个列表!改 b 也会改 a。真复制用b = a.copy()
八、动手练习
练习:待办清单管理器。循环显示菜单:1 添加待办 2 查看全部 3 删除待办 0 退出,用列表存储。
todos = []
while True:
print("\n1.添加 2.查看 3.删除 0.退出")
choice = input("请选择:")
if choice == "1":
todos.append(input("新待办:"))
elif choice == "2":
for i, t in enumerate(todos, 1):
print(i, t)
elif choice == "3":
n = int(input("删除第几条:"))
todos.pop(n - 1)
elif choice == "0":
break
新知识:enumerate(列表, 1) 能同时拿到"序号和内容",从 1 开始编号。
下一课预告:比列表更聪明的查找方式——字典与集合。