🐍 Python 零基础入门系列(五):列表与元组——序列操作全解析

📢 系列说明
欢迎来到《Python 零基础入门系列》第五篇!前四篇我们掌握了基础语法、运算符、流程控制和字符串操作。

📅 更新时间:2026 年 3 月(基于 Python 3.14 最新版本)

🎯 本篇你将学到:列表和元组的创建与访问、50+ 常用方法、列表推导式、两者特点与区别,以及 3 个实用数据管理项目。

⏱️ 预计阅读时间:50-60 分钟 | 💻 实践时间:40-50 分钟

📌 前置知识:已完成前四篇(基础语法、运算符、流程控制、字符串)


📋 完整目录

┌─────────────────────────────────────────────────────────────┐
│                    本篇博客内容导航                          │
├─────────────────────────────────────────────────────────────┤
│  第一部分:列表基础                                          │
│  ├── 1. 什么是列表?                                         │
│  ├── 2. 列表的创建方式                                       │
│  └── 3. 列表的索引与切片                                     │
├─────────────────────────────────────────────────────────────┤
│  第二部分:列表常用方法                                      │
│  ├── 4. 添加元素(append/insert/extend)                     │
│  ├── 5. 删除元素(remove/pop/clear/del)                     │
│  ├── 6. 查找元素(index/count/in)                           │
│  ├── 7. 排序与反转(sort/sorted/reverse)                    │
│  └── 8. 复制列表(copy/切片)                                │
├─────────────────────────────────────────────────────────────┤
│  第三部分:列表推导式                                        │
│  ├── 9. 基础语法                                             │
│  ├── 10. 条件过滤                                            │
│  └── 11. 嵌套推导式                                          │
├─────────────────────────────────────────────────────────────┤
│  第四部分:元组详解                                          │
│  ├── 12. 元组的创建                                          │
│  ├── 13. 元组的索引与切片                                    │
│  ├── 14. 元组的常用方法                                      │
│  └── 15. 元组解包                                            │
├─────────────────────────────────────────────────────────────┤
│  第五部分:列表 vs 元组                                      │
│  ├── 16. 可变性对比                                          │
│  ├── 17. 性能对比                                            │
│  ├── 18. 使用场景对比                                        │
│  └── 19. 何时用列表,何时用元组                              │
├─────────────────────────────────────────────────────────────┤
│  第六部分:综合实战                                          │
│  ├── 20. 实战一:学生成绩管理系统                            │
│  ├── 21. 实战二:购物车系统                                  │
│  └── 22. 实战三:待办事项列表                                │
└─────────────────────────────────────────────────────────────┘

第一部分:列表基础

1. 什么是列表?

📖 定义

列表(List) 是 Python 中最常用的有序、可变序列类型,可以存储任意类型的元素,是动态数组的实现。

┌─────────────────────────────────────────────────────────────┐
│                    列表的本质                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [10, 20, 30, 40, 50]                                       │
│   │   │   │   │   │                                         │
│   0   1   2   3   4   ← 正向索引                             │
│  -5  -4  -3  -2  -1   ← 负向索引                             │
│                                                             │
│  核心特性:                                                  │
│  ✅ 有序(Ordered)- 元素有固定顺序                          │
│  ✅ 可变(Mutable)- 可以修改、添加、删除元素                │
│  ✅ 可重复(Allow Duplicates)- 允许相同元素                 │
│  ✅ 异构(Heterogeneous)- 可存储不同类型                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. 列表的创建方式

📝 多种创建方法

# 1. 方括号创建(最常用)
list1 = [1, 2, 3, 4, 5]
list2 = ["苹果", "香蕉", "橙子"]

# 2. 空列表
list3 = []
list4 = list()

# 3. list() 转换
list5 = list("Python")  # ['P', 'y', 't', 'h', 'o', 'n']
list6 = list(range(5))  # [0, 1, 2, 3, 4]
list7 = list((1, 2, 3))  # 从元组转换 [1, 2, 3]

# 4. 混合类型
list8 = [1, "hello", 3.14, True, [1, 2]]

# 5. 列表推导式创建
list9 = [x for x in range(10)]

print(f"list1: {list1}")
print(f"list3: {list3}")
print(f"list5: {list5}")
print(f"list8: {list8}")

💡 创建技巧

# 技巧 1:重复元素
zeros = [0] * 5  # [0, 0, 0, 0, 0]
pairs = [1, 2] * 3  # [1, 2, 1, 2, 1, 2]

# 技巧 2:快速生成数字列表
numbers = list(range(1, 11))  # [1, 2, 3, ..., 10]

# 技巧 3:拆分字符串
chars = list("Hello")  # ['H', 'e', 'l', 'l', 'o']

# ⚠️ 陷阱:列表乘法创建二维列表
# ❌ 错误方式
matrix_wrong = [[0] * 3] * 3
matrix_wrong[0][0] = 1
print(matrix_wrong)  # [[1, 0, 0], [1, 0, 0], [1, 0, 0]] 所有行都被修改!

# ✅ 正确方式
matrix_right = [[0] * 3 for _ in range(3)]
matrix_right[0][0] = 1
print(matrix_right)  # [[1, 0, 0], [0, 0, 0], [0, 0, 0]]

3. 列表的索引与切片

列表支持与字符串相同的索引和切片操作。

🔍 索引访问

fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]

# 正向索引
print(fruits[0])   # 苹果
print(fruits[2])   # 橙子
print(fruits[4])   # 西瓜

# 负向索引
print(fruits[-1])  # 西瓜(最后一个)
print(fruits[-2])  # 葡萄(倒数第二个)
print(fruits[-5])  # 苹果(倒数第五个,即第一个)

# 修改元素
fruits[1] = "芒果"
print(fruits)  # ['苹果', '芒果', '橙子', '葡萄', '西瓜']

# ⚠️ 索引越界
# print(fruits[10])  # IndexError!

🔍 切片操作

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 基础切片
print(numbers[2:5])    # [2, 3, 4]
print(numbers[:5])     # [0, 1, 2, 3, 4]
print(numbers[5:])     # [5, 6, 7, 8, 9]
print(numbers[:])      # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9](复制)

# 步长切片
print(numbers[::2])    # [0, 2, 4, 6, 8]
print(numbers[1::2])   # [1, 3, 5, 7, 9]
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](反转)

# 切片修改
numbers[2:5] = [20, 30, 40]
print(numbers)  # [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]

# 切片删除
numbers[5:8] = []
print(numbers)  # [0, 1, 20, 30, 40, 8, 9]

第二部分:列表常用方法

4. 添加元素

方法 说明 示例 结果
append() 末尾添加单个元素 lst.append(5) [1,2,3,5]
insert() 指定位置插入 lst.insert(1, 5) [1,5,2,3]
extend() 末尾添加多个元素 lst.extend([4,5]) [1,2,3,4,5]

🔍 示例

fruits = ["苹果", "香蕉"]

# append - 添加单个元素
fruits.append("橙子")
print(fruits)  # ['苹果', '香蕉', '橙子']

# insert - 指定位置插入
fruits.insert(1, "葡萄")
print(fruits)  # ['苹果', '葡萄', '香蕉', '橙子']

# extend - 添加多个元素
fruits.extend(["西瓜", "芒果"])
print(fruits)  # ['苹果', '葡萄', '香蕉', '橙子', '西瓜', '芒果']

# += 也可以实现 extend
fruits += ["草莓", "蓝莓"]
print(fruits)  # ['苹果', '葡萄', '香蕉', '橙子', '西瓜', '芒果', '草莓', '蓝莓']

# ⚠️ append vs extend
list1 = [1, 2, 3]
list1.append([4, 5])
print(list1)  # [1, 2, 3, [4, 5]](嵌套列表)

list2 = [1, 2, 3]
list2.extend([4, 5])
print(list2)  # [1, 2, 3, 4, 5](扁平列表)

5. 删除元素

方法 说明 示例 返回值
remove() 删除第一个匹配值 lst.remove(3) None
pop() 删除并返回指定位置元素 lst.pop() 元素值
clear() 清空列表 lst.clear() None
del 删除语句(可删切片) del lst[0] None

🔍 示例

fruits = ["苹果", "香蕉", "橙子", "香蕉", "葡萄"]

# remove - 删除第一个匹配值
fruits.remove("香蕉")
print(fruits)  # ['苹果', '橙子', '香蕉', '葡萄']

# pop - 删除并返回
last = fruits.pop()  # 删除最后一个
print(f"删除了:{last}, 剩余:{fruits}")

second = fruits.pop(1)  # 删除索引 1
print(f"删除了:{second}, 剩余:{fruits}")

# clear - 清空
fruits.clear()
print(f"清空后:{fruits}")  # []

# del - 删除语句
numbers = [1, 2, 3, 4, 5]
del numbers[0]
print(numbers)  # [2, 3, 4, 5]

del numbers[1:3]
print(numbers)  # [2, 5]

# 删除整个列表
del numbers
# print(numbers)  # NameError!

6. 查找元素

方法 说明 示例 结果
index() 查找元素索引 lst.index(3) 2
count() 统计出现次数 lst.count(3) 1
in 判断是否存在 3 in lst True

🔍 示例

numbers = [1, 2, 3, 2, 4, 2, 5]

# index - 查找索引
print(numbers.index(3))  # 2
print(numbers.index(2))  # 1(第一个 2)
# print(numbers.index(10))  # ValueError!

# 带范围查找
print(numbers.index(2, 2))  # 3(从索引 2 开始找)
print(numbers.index(2, 4, 7))  # 5(在索引 4-7 之间找)

# count - 统计次数
print(numbers.count(2))  # 3
print(numbers.count(10))  # 0

# in - 判断存在
print(3 in numbers)  # True
print(10 in numbers)  # False
print(10 not in numbers)  # True

# 实用:安全查找
def safe_index(lst, value, default=-1):
    try:
        return lst.index(value)
    except ValueError:
        return default

print(safe_index(numbers, 10))  # -1

7. 排序与反转

方法/函数 说明 是否修改原列表
sort() 列表排序(方法) ✅ 是
sorted() 列表排序(函数) ❌ 否
reverse() 列表反转(方法) ✅ 是
[::-1] 切片反转 ❌ 否

🔍 示例

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# sort - 原地排序
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 降序排序
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1]

# 自定义排序(按绝对值)
nums = [-3, 1, -2, 4, -1]
nums.sort(key=abs)
print(nums)  # [1, -1, -2, -3, 4]

# sorted - 返回新列表
numbers = [3, 1, 4, 1, 5]
sorted_nums = sorted(numbers)
print(f"原列表:{numbers}")  # [3, 1, 4, 1, 5]
print(f"新列表:{sorted_nums}")  # [1, 1, 3, 4, 5]

# reverse - 原地反转
numbers.reverse()
print(numbers)  # [5, 1, 4, 1, 3]

# 切片反转 - 返回新列表
numbers = [1, 2, 3, 4, 5]
reversed_nums = numbers[::-1]
print(f"原列表:{numbers}")  # [1, 2, 3, 4, 5]
print(f"新列表:{reversed_nums}")  # [5, 4, 3, 2, 1]

# 字符串列表排序
words = ["python", "Java", "C++", "JavaScript"]
words.sort()  # 按 ASCII 排序(大写在前)
print(words)  # ['C++', 'Java', 'JavaScript', 'python']

words.sort(key=str.lower)  # 不区分大小写
print(words)  # ['C++', 'Java', 'JavaScript', 'python']

8. 复制列表

⚠️ 重要:浅拷贝 vs 深拷贝

# ❌ 错误:直接赋值(引用相同)
list1 = [1, 2, 3]
list2 = list1
list2.append(4)
print(list1)  # [1, 2, 3, 4] 原列表也被修改!
print(list2)  # [1, 2, 3, 4]
print(id(list1) == id(list2))  # True

# ✅ 方法 1:切片复制(浅拷贝)
list1 = [1, 2, 3]
list2 = list1[:]
list2.append(4)
print(list1)  # [1, 2, 3]
print(list2)  # [1, 2, 3, 4]

# ✅ 方法 2:copy() 方法(浅拷贝)
list1 = [1, 2, 3]
list2 = list1.copy()
list2.append(4)
print(list1)  # [1, 2, 3]
print(list2)  # [1, 2, 3, 4]

# ✅ 方法 3:list() 构造函数(浅拷贝)
list1 = [1, 2, 3]
list2 = list(list1)
list2.append(4)
print(list1)  # [1, 2, 3]
print(list2)  # [1, 2, 3, 4]

# ⚠️ 浅拷贝的陷阱(嵌套列表)
import copy

list1 = [1, 2, [3, 4]]
list2 = list1.copy()  # 浅拷贝
list2[2].append(5)
print(list1)  # [1, 2, [3, 4, 5]] 嵌套列表被修改!
print(list2)  # [1, 2, [3, 4, 5]]

# ✅ 深拷贝(完全独立)
list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)
list2[2].append(5)
print(list1)  # [1, 2, [3, 4]]
print(list2)  # [1, 2, [3, 4, 5]]

📊 复制方法对比

方法 类型 嵌套列表 推荐场景
= 引用 ❌ 共享 不需要复制时
[:] 浅拷贝 ❌ 共享 简单列表
.copy() 浅拷贝 ❌ 共享 简单列表(推荐)
list() 浅拷贝 ❌ 共享 从其他序列转换
copy.deepcopy() 深拷贝 ✅ 独立 嵌套列表

第三部分:列表推导式

9. 基础语法

列表推导式是创建列表的简洁方式,比 for 循环更高效。

📝 语法格式

[表达式 for 变量 in 序列]

等价于:

result = []
for 变量 in 序列:
    result.append(表达式)

🔍 示例

# 传统方式
squares = []
for i in range(10):
    squares.append(i ** 2)
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 列表推导式
squares = [i ** 2 for i in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 更多示例
# 1. 提取字符串长度
words = ["python", "java", "c++", "javascript"]
lengths = [len(word) for word in words]
print(lengths)  # [6, 4, 3, 10]

# 2. 转大写
upper_words = [word.upper() for word in words]
print(upper_words)  # ['PYTHON', 'JAVA', 'C++', 'JAVASCRIPT']

# 3. 数字转换
numbers = ["1", "2", "3", "4"]
ints = [int(n) for n in numbers]
print(ints)  # [1, 2, 3, 4]

# 4. 生成坐标对
coords = 
print(coords)  # 

10. 条件过滤

📝 语法格式

[表达式 for 变量 in 序列 if 条件]

🔍 示例

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 筛选偶数
evens = [n for n in numbers if n % 2 == 0]
print(evens)  # [2, 4, 6, 8, 10]

# 筛选大于 5 的数
greater_than_5 = [n for n in numbers if n > 5]
print(greater_than_5)  # [6, 7, 8, 9, 10]

# 多个条件
result = [n for n in numbers if n % 2 == 0 if n > 5]
print(result)  # [6, 8, 10]

# if-else 表达式
labels = ["偶数" if n % 2 == 0 else "奇数" for n in numbers]
print(labels)  # ['奇数', '偶数', '奇数', '偶数', ...]

# 实用:过滤空字符串
texts = ["hello", "", "world", "", "python"]
non_empty = [t for t in texts if t]
print(non_empty)  # ['hello', 'world', 'python']

# 实用:提取数字
mixed = ["a", "1", "b", "2", "c", "3"]
digits = [int(x) for x in mixed if x.isdigit()]
print(digits)  # [1, 2, 3]

11. 嵌套推导式

🔍 示例

# 二维列表展平
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 等价的传统写法
flattened = []
for row in matrix:
    for num in row:
        flattened.append(num)

# 生成乘法表
multiplication = [[i * j for j in range(1, 10)] for i in range(1, 10)]
print(multiplication[0])  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(multiplication[8])  # [9, 18, 27, 36, 45, 54, 63, 72, 81]

# 矩阵转置
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(3)]
print(transposed)  # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

# 过滤嵌套列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
evens = [[num for num in row if num % 2 == 0] for row in matrix]
print(evens)  # [[2], [4, 6], [8]]

💡 建议:嵌套推导式不要超过 2 层,否则可读性会下降。


第四部分:元组详解

12. 元组的创建

📖 定义

元组(Tuple) 是 Python 中的有序、不可变序列类型,一旦创建就不能修改。

📝 创建方式

# 1. 圆括号创建
tuple1 = (1, 2, 3, 4, 5)
tuple2 = ("苹果", "香蕉", "橙子")

# 2. 空元组
tuple3 = ()
tuple4 = tuple()

# 3. tuple() 转换
tuple5 = tuple("Python")  # ('P', 'y', 't', 'h', 'o', 'n')
tuple6 = tuple([1, 2, 3])  # (1, 2, 3)
tuple7 = tuple(range(5))  # (0, 1, 2, 3, 4)

# 4. 单元素元组(注意逗号!)
single1 = (5,)  # ✅ 正确
single2 = (5)   # ❌ 这是整数 5,不是元组!
single3 = 5,    # ✅ 也可以,逗号是关键

print(f"single1: {single1}, 类型:{type(single1)}")
print(f"single2: {single2}, 类型:{type(single2)}")
print(f"single3: {single3}, 类型:{type(single3)}")

# 5. 省略括号(元组打包)
tuple8 = 1, 2, 3
print(tuple8)  # (1, 2, 3)

13. 元组的索引与切片

元组支持与列表相同的索引和切片操作。

🔍 示例

colors = ("红", "绿", "蓝", "黄", "紫")

# 索引访问
print(colors[0])    # 红
print(colors[-1])   # 紫
print(colors[2])    # 蓝

# 切片
print(colors[1:4])   # ('绿', '蓝', '黄')
print(colors[::-1])  # ('紫', '黄', '蓝', '绿', '红')

# ⚠️ 元组不可修改
# colors[0] = "橙"  # TypeError!
# colors.append("白")  # TypeError!

# ✅ 但可以通过重新赋值"修改"
colors = colors + ("白",)
print(colors)  # ('红', '绿', '蓝', '黄', '紫', '白')

14. 元组的常用方法

元组方法比列表少,因为不可变。

方法 说明 示例 结果
count() 统计出现次数 t.count(1) 2
index() 查找元素索引 t.index(2) 1

🔍 示例

numbers = (1, 2, 3, 2, 4, 2, 5)

# count
print(numbers.count(2))  # 3

# index
print(numbers.index(3))  # 2
# print(numbers.index(10))  # ValueError!

# len
print(len(numbers))  # 7

# in
print(3 in numbers)  # True
print(10 in numbers)  # False

# 其他操作(与列表相同)
print(len(numbers))      # 7
print(min(numbers))      # 1
print(max(numbers))      # 5
print(sum(numbers))      # 19
print(numbers + (6, 7))  # (1, 2, 3, 2, 4, 2, 5, 6, 7)
print(numbers * 2)       # (1, 2, 3, 2, 4, 2, 5, 1, 2, 3, 2, 4, 2, 5)

15. 元组解包

元组解包是 Python 的优雅特性,用于快速赋值。

🔍 基础解包

# 基本解包
point = (10, 20)
x, y = point
print(f"x={x}, y={y}")  # x=10, y=20

# 多变量赋值
a, b, c = 1, 2, 3
print(a, b, c)  # 1 2 3

# 交换变量(Python 特色)
a, b = 1, 2
a, b = b, a
print(a, b)  # 2 1

# 函数返回多值
def get_info():
    return "小明", 18, "北京"

name, age, city = get_info()
print(f"{name}, {age}岁,{city}")  # 小明,18 岁,北京

🔍 扩展解包(Python 3)

# * 解包剩余元素
numbers = (1, 2, 3, 4, 5)
first, *middle, last = numbers
print(f"first={first}, middle={middle}, last={last}")
# first=1, middle=[2, 3, 4], last=5

# 只取前几个
first, second, *rest = numbers
print(f"first={first}, second={second}, rest={rest}")
# first=1, second=2, rest=[3, 4, 5]

# 只取后几个
*beginning, second_last, last = numbers
print(f"beginning={beginning}, second_last={second_last}, last={last}")
# beginning=[1, 2, 3], second_last=4, last=5

# 嵌套解包
nested = (1, (2, 3), 4)
a, (b, c), d = nested
print(a, b, c, d)  # 1 2 3 4

💡 实用场景

# 场景 1:遍历字典
person = {"name": "小明", "age": 18, "city": "北京"}
for key, value in person.items():
    print(f"{key}: {value}")

# 场景 2:enumerate 获取索引和值
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 场景 3:zip 并行遍历
names = ["小明", "小红", "小刚"]
scores = [90, 85, 88]
for name, score in zip(names, scores):
    print(f"{name}: {score}分")

第五部分:列表 vs 元组

16. 可变性对比

┌─────────────────────────────────────────────────────────────┐
│                    可变性对比                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  列表(List)                                                │
│  ═══════                                                    │
│  ✅ 可变(Mutable)                                          │
│  • 可以添加元素(append/extend/insert)                     │
│  • 可以删除元素(remove/pop/del)                           │
│  • 可以修改元素(lst[0] = new_value)                       │
│  • 可以排序(sort/reverse)                                 │
│                                                             │
│  ─────────────────────────────────────────────────────────  │
│                                                             │
│  元组(Tuple)                                               │
│  ═══════                                                    │
│  ❌ 不可变(Immutable)                                      │
│  • 不能添加元素                                             │
│  • 不能删除元素                                             │
│  • 不能修改元素                                             │
│  • 不能排序                                                 │
│  • 但可以通过重新赋值"替换"整个元组                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🔍 代码对比

# 列表 - 可变
list1 = [1, 2, 3]
list1[0] = 100      # ✅ 可以修改
list1.append(4)     # ✅ 可以添加
list1.remove(2)     # ✅ 可以删除
print(list1)        # [100, 3, 4]

# 元组 - 不可变
tuple1 = (1, 2, 3)
# tuple1[0] = 100   # ❌ TypeError!
# tuple1.append(4)  # ❌ AttributeError!
# tuple1.remove(2)  # ❌ AttributeError!
tuple1 = (100, 2, 3)  # ✅ 重新赋值(创建新元组)
print(tuple1)       # (100, 2, 3)

17. 性能对比

📊 性能测试

import timeit

# 创建性能
list_time = timeit.timeit('[1, 2, 3, 4, 5]', number=1000000)
tuple_time = timeit.timeit('(1, 2, 3, 4, 5)', number=1000000)

print(f"列表创建时间:{list_time:.4f}秒")
print(f"元组创建时间:{tuple_time:.4f}秒")
print(f"元组快约:{list_time/tuple_time:.2f}倍")

# 内存占用
import sys
list1 = [1, 2, 3, 4, 5]
tuple1 = (1, 2, 3, 4, 5)

print(f"列表内存:{sys.getsizeof(list1)}字节")
print(f"元组内存:{sys.getsizeof(tuple1)}字节")
print(f"元组节省:{(sys.getsizeof(list1)-sys.getsizeof(tuple1))/sys.getsizeof(list1)*100:.1f}%")

📋 性能对比总结

特性 列表 元组 优势方
创建速度 较慢 较快 元组
访问速度 更快 元组
内存占用 较大 较小 元组
修改灵活性 列表

18. 使用场景对比

┌─────────────────────────────────────────────────────────────┐
│                    使用场景对比                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  📌 使用列表的场景                                           │
│  ══════════════                                             │
│  • 需要动态添加/删除元素                                     │
│  • 需要修改元素内容                                          │
│  • 需要排序或反转                                            │
│  • 存储同类数据的集合                                        │
│  • 作为栈或队列使用                                          │
│                                                             │
│  ─────────────────────────────────────────────────────────  │
│                                                             │
│  📌 使用元组的场景                                           │
│  ══════════════                                             │
│  • 数据不应该被修改(如配置常量)                            │
│  • 作为字典的键(列表不能做键)                              │
│  • 函数返回多个值                                            │
│  • 存储异构数据(如数据库记录)                              │
│  • 需要保证数据安全性                                        │
│  • 性能敏感的场景                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

19. 何时用列表,何时用元组

📋 决策指南

# ✅ 用列表
# 场景 1:待办事项(需要增删)
todos = ["学习 Python", "写博客", "锻炼身体"]
todos.append("看电影")
todos.remove("写博客")

# 场景 2:收集数据
scores = []
for i in range(5):
    scores.append(int(input(f"输入第{i+1}个分数:")))

# 场景 3:需要排序
numbers = [5, 2, 8, 1, 9]
numbers.sort()

# ✅ 用元组
# 场景 1:配置常量(不应修改)
RGB_RED = (255, 0, 0)
RGB_GREEN = (0, 255, 0)
RGB_BLUE = (0, 0, 255)

# 场景 2:数据库记录
user_record = ("小明", 18, "北京", "student@example.com")

# 场景 3:字典的键
locations = {
    (39.9, 116.4): "北京",
    (31.2, 121.5): "上海",
    (23.1, 113.3): "广州"
}

# 场景 4:函数返回多值
def get_user_info():
    return "小明", 18, "北京"

name, age, city = get_user_info()

💡 博主建议

┌─────────────────────────────────────────────────────────────┐
│                    专家建议                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1️⃣ 默认使用列表                                             │
│     除非有明确理由使用元组,否则优先用列表                   │
│                                                             │
│  2️⃣ 保护数据用元组                                           │
│     如果数据不应该被修改,用元组表达意图                     │
│                                                             │
│  3️⃣ 字典键必须用元组                                         │
│     列表不能作为字典的键(不可哈希)                         │
│                                                             │
│  4️⃣ 函数返回多值用元组                                       │
│     这是 Python 的约定俗成                                   │
│                                                             │
│  5️⃣ 性能敏感用元组                                           │
│     元组创建和访问略快,内存占用更小                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

第六部分:综合实战

20. 实战一:学生成绩管理系统

📋 项目需求

  1. 添加学生信息(姓名、成绩)
  2. 查询学生成绩
  3. 修改学生成绩
  4. 删除学生信息
  5. 统计平均分、最高分、最低分
  6. 成绩排序

💻 完整代码

由于代码内容过多,导致博客篇幅过长,所以之后实战答案将单独出一篇博客,大家可以先自行练习,之后再核对答案


21. 实战二:购物车系统

📋 项目需求

  1. 添加商品到购物车
  2. 移除商品
  3. 修改商品数量
  4. 计算总价
  5. 清空购物车
  6. 显示购物车内容

💻 完整代码

由于代码内容过多,导致博客篇幅过长,所以之后实战答案将单独出一篇博客,大家可以先自行练习,之后再核对答案


22. 实战三:待办事项列表

📋 项目需求

  1. 添加待办事项
  2. 标记完成
  3. 删除事项
  4. 显示所有/已完成/未完成
  5. 统计进度

💻 完整代码

由于代码内容过多,导致博客篇幅过长,所以之后实战答案将单独出一篇博客,大家可以先自行练习,之后再核对答案


📝 总结与下一篇预告

本篇核心知识点回顾

┌─────────────────────────────────────────────────────────────┐
│                    知识点思维导图                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Python 列表与元组                                           │
│  │                                                          │
│  ├── 列表(List)                                            │
│  │   ├── 创建([]/list())                                  │
│  │   ├── 索引与切片                                         │
│  │   ├── 添加(append/insert/extend)                       │
│  │   ├── 删除(remove/pop/clear/del)                       │
│  │   ├── 查找(index/count/in)                             │
│  │   ├── 排序(sort/sorted/reverse)                        │
│  │   ├── 复制(copy/切片/深拷贝)                           │
│  │   └── 推导式(基础/条件/嵌套)                           │
│  │                                                          │
│  ├── 元组(Tuple)                                           │
│  │   ├── 创建(()/tuple())                                 │
│  │   ├── 索引与切片                                         │
│  │   ├── 方法(count/index)                                │
│  │   └── 解包(基础/扩展/嵌套)                             │
│  │                                                          │
│  ├── 列表 vs 元组                                            │
│  │   ├── 可变性(列表可变,元组不可变)                     │
│  │   ├── 性能(元组更快更省内存)                           │
│  │   └── 场景(列表灵活,元组安全)                         │
│  │                                                          │
│  └── 实战应用                                                │
│      ├── 学生成绩管理系统                                   │
│      ├── 购物车系统                                         │
│      └── 待办事项列表                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

✅ 学习检查清单

  • 理解列表的可变特性
  • 掌握列表的增删改查方法
  • 熟练使用列表推导式
  • 理解元组的不可变特性
  • 掌握元组解包技巧
  • 清楚列表与元组的区别
  • 完成 3 个实战项目

🚀 下一篇预告

《Python 零基础入门系列(六):字典与集合——映射与去重操作》

┌─────────────────────────────────────────────────────────────┐
│                    第六篇内容预告                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1️⃣ 字典基础                                                 │
│     • 字典的创建与表示                                       │
│     • 字典的访问与修改                                       │
│     • 字典的遍历方法                                         │
│                                                             │
│  2️⃣ 字典常用方法                                             │
│     • 添加与更新(update/setdefault)                        │
│     • 删除(pop/popitem/clear/del)                          │
│     • 查找(get/keys/values/items)                          │
│     • 字典推导式                                             │
│                                                             │
│  3️⃣ 集合基础                                                 │
│     • 集合的创建                                             │
│     • 集合的增删操作                                         │
│     • 集合的数学运算(交集/并集/差集)                       │
│                                                             │
│  4️⃣ 字典 vs 集合:特点与区别 ★重点                           │
│     • 数据结构对比                                           │
│     • 使用场景对比                                           │
│     • 性能对比                                               │
│                                                             │
│  5️⃣ 综合实战                                                 │
│     • 通讯录管理系统                                         │
│     • 词频统计工具                                           │
│     • 数据去重处理器                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📅 完整系列更新计划

┌─────────────────────────────────────────────────────────────┐
│          🐍 Python 零基础入门系列 · 完整规划(12 篇版)         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  📌 第一篇:Python 认知 + 环境搭建 + 基础语法                │
│      ✅ 已完成                                               │
│                                                             │
│  📌 第二篇:常用运算符完全详解                               │
│      ✅ 已完成                                               │
│                                                             │
│  📌 第三篇:流程控制——条件判断与循环结构                     │
│      ✅ 已完成                                               │
│                                                             │
│  📌 第四篇:字符串常用操作详解                               │
│      ✅ 已完成                                               │
│                                                             │
│  📌 第五篇(本篇):列表与元组——序列操作全解析               │
│      ✅ 已完成                                               │
│                                                             │
│  📌 第六篇:字典与集合——映射与去重操作                       │
│      🔜 即将发布                                             │
│                                                             │
│  📌 第七篇:函数基础知识(上)                               │
│      🔜 敬请期待                                             │
│      • 什么是函数                                            │
│      • 函数的定义和调用                                      │
│      • 函数的参数                                            │
│      • 函数的返回值                                          │
│                                                             │
│  📌 第八篇:函数基础知识(下)                               │
│      🔜 敬请期待                                             │
│      • 函数的文档注释                                        │
│      • 函数的嵌套调用                                        │
│      • 局部变量和全局变量                                    │
│                                                             │
│  📌 第九篇:函数进阶知识                                     │
│      🔜 敬请期待                                             │
│      • 匿名函数(lambda)                                    │
│      • 递归函数                                              │
│      • 高阶函数                                              │
│                                                             │
│  📌 第十篇:闭包和装饰器                                     │
│      🔜 敬请期待                                             │
│      • 闭包的概念与原理                                      │
│      • 装饰器的语法与用法                                    │
│      • 带参数的装饰器                                        │
│                                                             │
│  📌 第十一篇:模块和包                                       │
│      🔜 敬请期待                                             │
│      • 模块的导入与使用                                      │
│      • 常用标准库模块                                        │
│      • 包的创建与结构                                        │
│                                                             │
│  📌 第十二篇及后续:更多进阶内容                             │
│      🔜 敬请期待                                             │
│      • 文件操作                                              │
│      • 异常处理                                              │
│      • 面向对象编程                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📊 系列进度可视化

进度条:████████████████░░░░░░░░ 5/12 完成

✅ ✅ ✅ ✅ ✅ 🔜 🔜 🔜 🔜 🔜 🔜 🔜

📚 推荐学习资源

类型 名称 链接
官网 Python 官方网站 https://www.python.org
文档 Python 官方文档(中文) https://docs.python.org/zh-cn/3/
教程 菜鸟教程 Python https://www.runoob.com/python3/
教程 廖雪峰 Python 教程 https://www.liaoxuefeng.com/wiki/1016959663602400
练习 LeetCode https://leetcode.cn
练习 CheckiO(游戏化学习) https://checkio.org
社区 Stack Overflow https://stackoverflow.com
社区 Python 中文社区 https://python-china.org

💬 结语

"列表和元组是 Python 数据结构的基石,掌握它们,你就掌握了组织和管理数据的基本能力。"

恭喜你完成了 Python 入门系列的第五篇!现在你已经:

  • ✅ 掌握了列表的创建、访问、增删改查
  • ✅ 学会了列表推导式的高效用法
  • ✅ 理解了元组的不可变特性与解包技巧
  • ✅ 清楚列表与元组的区别与使用场景
  • ✅ 完成了学生管理、购物车、待办事项 3 个实战项目

下一步建议

  1. 把实战代码亲手敲一遍,尝试添加新功能
  2. 用列表和元组解决日常数据管理问题
  3. 复习前五篇内容,形成完整知识体系
  4. 准备迎接第六篇——字典与集合!

记住选择合适的数据结构是编程的关键,多思考、多实践!


📅 更新时间:2026 年 3 月 17 日
✍️ 作者:书到用时方恨少! | 专注 Python 教学与 AI 技术分享
💌 如有疑问,欢迎在评论区留言讨论!

如果觉得这篇文章有帮助,请点赞👍、收藏⭐、转发🔄,让更多的小伙伴一起加入 Python 学习的行列!


📢 系列文章索引

篇数 主题 状态 链接
第一篇 Python 认知 + 环境搭建 + 基础语法 ✅ 已完成 点击查看
第二篇 常用运算符完全详解 ✅ 已完成 点击查看
第三篇 流程控制——条件判断与循环结构 ✅ 已完成 点击查看
第四篇 字符串常用操作详解 ✅ 已完成 点击查看
第五篇 列表与元组——序列操作全解析 ✅ 已完成 当前文章
第六篇 字典与集合——映射与去重操作 🔜 即将发布 敬请期待
第七篇 函数基础知识(上) 🔜 敬请期待 敬请期待
第八篇 函数基础知识(下) 🔜 敬请期待 敬请期待
第九篇 函数进阶知识 🔜 敬请期待 敬请期待
第十篇 闭包和装饰器 🔜 敬请期待 敬请期待
第十一篇 模块和包 🔜 敬请期待 敬请期待
第十二篇 更多进阶内容 🔜 敬请期待 敬请期待

🔔 订阅提醒:关注我,不错过每一篇更新!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐