【Python基础:语法第四课】列表和元组

【Python基础:语法第四课】列表(list)和元组(tuple)详解
(2026最新实用版 · 0基础友好 · 结合AI学习路径)

这是Python语法系列的第四课,前三课我们已经掌握了变量、数据类型、输入输出、运算符、条件判断、循环和函数基础。今天重点学习列表和元组——Python中最常用、最重要的序列类型(有序集合)。

掌握它们后,你就能轻松处理成批数据,为后续学习NumPy、Pandas、AI数据处理、Ollama本地模型应用打下坚实基础。

1. 列表(list)和元组(tuple)核心区别

一句话记住:

  • 列表(list):可变(像铅笔写的字,可以擦除重写),用中括号 [] 创建。
  • 元组(tuple):不可变(像用笔写的字,一旦写好不能改),用小括号 () 创建。
特性列表 (list)元组 (tuple)说明
可变性可变(可增删改)不可变(创建后不能修改)最核心区别
创建方式[]list()()tuple()元组单元素需加逗号
性能稍慢更快(内存占用更小)元组适合固定数据
用途场景需要频繁修改的数据固定配置、函数返回多个值、作为字典key推荐优先用元组(能用就用)
是否允许重复允许允许两者都支持
索引与切片支持支持完全相同

为什么要有两种?
列表灵活但消耗更多资源;元组安全且高效。AI项目中,模型参数配置常用元组,训练数据常用列表。

2. 创建列表和元组

# 列表(可变)
empty_list = []
fruits = ["苹果", "香蕉", "橙子", "苹果"]   # 允许重复
numbers = [1, 2, 3, 4.5, True, "文本"]      # 类型可以不同
mixed = list(range(5))                      # [0, 1, 2, 3, 4]

# 元组(不可变)
empty_tuple = ()
colors = ("红", "绿", "蓝")
single = (5,)                               # 重要!单元素元组必须加逗号,否则变成int
coords = tuple([10, 20, 30])                # 从列表转换

小技巧:用 type() 查看类型,用 len() 获取长度。

print(type(fruits))      # <class 'list'>
print(len(colors))       # 3

3. 共同操作:索引、切片、遍历(两者完全一样)

索引从 0 开始,支持负索引(-1表示最后一个)。

print(fruits[0])         # 苹果
print(fruits[-1])        # 苹果
print(fruits[1:3])       # ['香蕉', '橙子']  切片:左闭右开

# 遍历
for fruit in fruits:
    print(fruit)

# 带索引遍历(推荐)
for i, fruit in enumerate(fruits):
    print(i, fruit)

4. 列表特有操作(可修改)

fruits.append("芒果")           # 末尾添加
fruits.insert(1, "葡萄")        # 指定位置插入
fruits.extend(["西瓜", "樱桃"]) # 合并另一个可迭代对象

fruits.remove("苹果")           # 删除第一个匹配项
popped = fruits.pop()           # 删除并返回末尾元素(默认)
del fruits[0]                   # 删除指定索引
fruits.clear()                  # 清空

fruits[0] = "火龙果"            # 直接修改
fruits[1:3] = ["梨", "桃"]      # 切片替换

其他常用方法

  • sort() / sorted():排序(原地 vs 新列表)
  • reverse() / reversed():反转
  • count(x):计数
  • index(x):查找位置(不存在报错)
  • copy():浅拷贝(重要!直接赋值是引用)

5. 元组操作(只能读,不能改)

元组没有 appendremovepop 等修改方法。

但支持:

  • 索引、切片、遍历、len()、count()、index()
  • 打包与解包(超级实用!)
# 元组打包(自动)
point = 10, 20, 30          # 等价于 (10, 20, 30)

# 元组解包(最优雅的赋值方式)
x, y, z = point
print(x, y, z)              # 10 20 30

# 部分解包 + 剩余用 * 
a, *rest = (1, 2, 3, 4, 5)
print(a, rest)              # 1 [2, 3, 4, 5]

# 函数返回多个值常用元组
def get_info():
    return "张三", 25, "北京"

name, age, city = get_info()

6. 列表推导式(List Comprehension)—— Pythonic神器

一行代码生成新列表(2026仍是最常用技巧):

# 基础
squares = [x**2 for x in range(10)]          # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件
even_squares = [x**2 for x in range(10) if x % 2 == 0]

# 嵌套(笛卡尔积)
pairs = [(x, y) for x in [1,2] for y in ['a','b']]

元组没有推导式,但可以用 tuple(生成器) 或列表推导后再转。

7. 嵌套与实际应用示例

# 嵌套列表(矩阵)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][2])   # 6

# 学生信息(列表套元组,推荐:可修改整体,但单条记录不可变)
students = [
    ("小明", 18, "男"),
    ("小红", 17, "女")
]

# 遍历解包
for name, age, gender in students:
    print(f"姓名:{name},年龄:{age}")

8. 常见坑 & 最佳实践(2026建议)

  • 坑1a = b = [] 会让两个变量指向同一个列表,修改一个另一个也变。用 copy()list(b)
  • 坑2:元组单元素忘记逗号:(5) 是整数 5,不是元组。
  • 坑3:列表作为函数默认参数(可变默认值陷阱)。
  • 最佳实践
  • 数据不需要修改 → 优先用元组(更安全、更快)。
  • 需要频繁增删改 → 用列表
  • 配置、坐标、函数返回值 → 用元组。
  • 大量数据处理 → 后续学NumPy数组(比列表更快)。

9. 课后练习(立即动手,建议在VS Code + venv中完成)

  1. 创建一个水果列表,添加3个水果,删除第2个,排序后打印。
  2. 创建坐标元组 (3, 4),解包得到x、y,计算距离原点(用 math.sqrt)。
  3. 用列表推导式生成 [1, 4, 9, 16, 25](1到5的平方)。
  4. 写一个函数,返回多个值(姓名、年龄、成绩),用元组解包接收并打印。
  5. (进阶)有一个列表 [1,2,3,4,5],用推导式生成只保留偶数并乘以10的新列表。

把练习代码写完后,运行测试,遇到问题可以直接问我!


本课结束!现在你已经掌握了Python最核心的两个序列类型。
下一课预告:字典(dict)和集合(set)——键值对与去重神器。

想看:

  • 本课完整可运行代码文件
  • 更多列表/元组面试题与AI应用示例(比如用列表存提示词、元组存模型配置)
  • 嵌套列表转矩阵、深拷贝详解
  • 结合Ollama的练习(让本地AI帮你生成列表操作代码)

随时告诉我,我立刻补充!继续加油,你正在快速打下Python + AI的坚实基础!🚀

(所有示例均在Python 3.12+测试通过,2026年语法无重大变化)

文章已创建 5160

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部