跳到主要内容

使用list和tuple

1. list(列表)- 可变有序集合

基本概念

  • 定义:有序集合,可以随时添加和删除元素
  • 特点可变(mutable)
classmates = ['Michael', 'Bob', 'Tracy']

访问元素

  • 索引访问:从 0 开始
  • 负索引-1 表示最后一个元素,-2 表示倒数第二个,以此类推
classmates[0]    # 'Michael'
classmates[-1] # 'Tracy'(最后一个)
classmates[-2] # 'Bob'(倒数第二个)

注意:索引越界会报 IndexError

常用操作

添加元素

# 追加到末尾
classmates.append('Adam')

# 插入到指定位置
classmates.insert(1, 'Jack') # 插入到索引1的位置

删除元素

# 删除末尾元素
classmates.pop() # 返回被删除的元素

# 删除指定位置元素
classmates.pop(1) # 删除索引1的元素

替换元素

classmates[1] = 'Sarah'  # 直接赋值替换

特殊特性

  • 元素类型可以不同
L = ['Apple', 123, True]
  • 可以嵌套(二维数组):
s = ['python', 'java', ['asp', 'php'], 'scheme']
s[2][1] # 'php'(访问嵌套list)
  • 空list
L = []
len(L) # 0

2. tuple(元组)- 不可变有序列表

基本概念

  • 定义:有序列表,一旦初始化就不能修改
  • 特点不可变(immutable)
  • 优势:代码更安全,能用 tuple 代替 list 就尽量用
classmates = ('Michael', 'Bob', 'Tracy')

访问元素

与 list 相同,可以使用索引和负索引:

classmates[0]    # 'Michael'
classmates[-1] # 'Tracy'

注意:不能赋值修改,没有 append()insert() 等方法

定义方式

正常定义

t = (1, 2, 3)

空tuple

t = ()

单元素tuple(重要陷阱)

# ❌ 错误:这不是tuple,是数字1
t = (1)
t # 1

# ✅ 正确:必须加逗号
t = (1,)
t # (1,)

记忆:单元素 tuple 必须加逗号,否则会被当作括号表达式

"可变的"tuple 陷阱

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X' # ✅ 可以修改
t[2][1] = 'Y' # ✅ 可以修改
t # ('a', 'b', ['X', 'Y'])

核心理解

  • tuple 的指向不变:每个元素指向的对象不能改变
  • 指向的对象本身可变:如果元素是 list,list 的内容可以修改

图解

tuple -> ['a', 'b', list对象]

list对象本身可变

要创建完全不可变的 tuple,必须保证每个元素本身也不可变。

3. 对比总结

特性listtuple
可变性✅ 可变❌ 不可变
定义[]()
添加元素append(), insert()❌ 不支持
删除元素pop()❌ 不支持
修改元素✅ 支持❌ 不支持
安全性较低较高
使用场景需要修改的集合固定不变的集合

4. 快速记忆口诀

  • list:方括号 [],可变,增删改查都支持
  • tuple:圆括号 (),不可变,单元素要加逗号
  • 选择原则:能用 tuple 就用 tuple,更安全
  • 陷阱记忆:tuple 指向不变,但指向的对象可变(如 list)

5. 常见操作速查

list 操作

L = ['a', 'b', 'c']

# 访问
L[0] # 'a'
L[-1] # 'c'

# 添加
L.append('d') # ['a', 'b', 'c', 'd']
L.insert(1, 'x') # ['a', 'x', 'b', 'c', 'd']

# 删除
L.pop() # 'd',L变为['a', 'x', 'b', 'c']
L.pop(1) # 'x',L变为['a', 'b', 'c']

# 修改
L[0] = 'A' # ['A', 'b', 'c']

# 长度
len(L) # 3

tuple 操作

t = ('a', 'b', 'c')

# 访问
t[0] # 'a'
t[-1] # 'c'

# ❌ 不支持修改
# t[0] = 'A' # TypeError

# 长度
len(t) # 3