📚 Python 元组(Tuple)完整笔记

元组(tuple)是 Python 中一种 不可变的有序序列,常用于存储固定不变的数据


一、元组的定义

✅ 基本语法

# 多个元素
t1 = (1, 2, 3)

# 空元组(两种写法)
t2 = ()
t3 = tuple()

# 单个元素(必须加逗号!)
t4 = ("4",)   # ✅ 正确:tuple
t5 = ("4")    # ❌ 错误:这是字符串 str!

⚠️ 关键细节
定义只有一个元素的元组时,必须在元素后加逗号,否则 Python 会将其视为普通括号表达式。


二、元组的特性

特性说明
有序元素按插入顺序存储,可通过下标访问
不可变(Immutable)一旦创建,不能增删改元组本身的元素
允许重复元素(1, 1, 2) 是合法的
可嵌套元组中可以包含其他元组、列表、字典等
支持索引和切片t[0], t[1:3]

💡 重要理解
“不可变”指的是元组的结构(即元素引用)不能变,但如果元素是可变对象(如 list),其内容仍可修改。

t = (1, 2, ["a", "b"])
t[2].append("c")  # ✅ 合法!修改的是内部 list
print(t)  # (1, 2, ['a', 'b', 'c'])

# t[0] = 10       # ❌ 报错!不能修改元组元素
# t.append(4)     # ❌ 报错!元组无 append 方法

三、元组的常用操作

1. 索引与切片

t = (10, 20, 30, 40)
print(t[0])    # 10
print(t[-1])   # 40
print(t[1:3])  # (20, 30)

2. 嵌套元组访问

t5 = ((1, 2, 3), (4, 5, 6))
print(t5[1][2])  # 6

3. 查找元素下标:index()

t6 = (1, 2, 3)
print(t6.index(3))  # 2
# 如果元素不存在,会抛出 ValueError

4. 统计元素个数:count()

t7 = (1, 2, 2, 2, 3, 3, 3, 3)
print(t7.count(3))  # 4

5. 获取长度:len()

t8 = (1, 2, 2, 3)
print(len(t8))  # 4

四、元组的遍历

✅ 使用 while 循环

t9 = (1, 2, 3)
index = 0
while index < len(t9):
    print(f"元素: {t9[index]}")
    index += 1

✅ 使用 for 循环(推荐)

t10 = (4, 5, 6)
for element in t10:
    print(f"元素: {element}")

📌 建议:优先使用 for 循环,代码更简洁、安全。


五、元组 vs 列表(List)

特性元组(tuple)列表(list)
可变性❌ 不可变✅ 可变
语法(1, 2, 3)[1, 2, 3]
性能⚡ 更快(内存更紧凑)稍慢
用途存储固定数据(如坐标、配置)存储动态数据
方法少(只有 index, count多(append, remove, sort 等)
作为字典键✅ 可以(因为不可变)❌ 不可以

使用场景建议

  • 用元组:坐标 (x, y)、数据库记录、函数返回多个值
  • 用列表:需要增删改的数据集合

六、元组的高级用法(拓展)

1. 元组解包(Unpacking)

point = (3, 4)
x, y = point
print(x, y)  # 3 4

# 交换变量(无需临时变量)
a, b = 1, 2
a, b = b, a
print(a, b)  # 2 1

2. 函数返回多个值(实际返回元组)

def get_name_age():
    return "Alice", 25  # 实际返回 ("Alice", 25)

name, age = get_name_age()

3. 作为字典的键

locations = {
    (0, 0): "原点",
    (1, 1): "东北角"
}
print(locations[(0, 0)])  # 原点

4. 命名元组(collections.namedtuple)——进阶

from collections import namedtuple
Person = namedtuple('Person', ['name', 'age'])
p = Person("Bob", 30)
print(p.name)  # Bob(像对象一样访问)

七、练习题解析(你的代码)

my_tuple = ("周杰伦", 11, ["football", "music"])

# 1. 查询年龄下标
age_index = my_tuple.index(11)  # 1

# 2. 查询姓名
name = my_tuple[0]  # "周杰伦"

# 3. 删除爱好中的 "football"
del my_tuple[2][0]  # 修改内部 list

# 4. 增加爱好 "coding"
my_tuple[2].append("coding")  # ✅ 正确!

print(my_tuple)
# 输出: ('周杰伦', 11, ['music', 'coding'])

关键点:虽然元组不可变,但其内部的 list 是可变的,所以可以修改 list 的内容。


八、常见错误总结

错误写法正确写法原因
t = (1)t = (1,)单元素元组必须加逗号
t.append(2)t = t + (2,)元组无 append,但可拼接
t[0] = 10不允许元组元素不可修改
t.index(999)先判断是否存在元素不存在会报 ValueError

✅ 总结口诀

“元组圆括号,逗号不能落;
单元加逗号,否则变字符串。
本身不可变,内嵌 list 可改;
查找用 index,统计用 count。
遍历 for 最好,解包很巧妙;
固定数据用 tuple,灵活变动用 list!”


✅ 掌握这些,你就完全理解 Python 元组了!

更多推荐