列表对象在 Python 中提供添加、删除、查找、排序与复制等方法。部分方法会修改原列表(如 append、sort),部分仅查询或返回新对象(如 index、copy)。本节按功能分类说明常见调用,并对照表归纳是否改变原列表。

先看一组调用

nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.sort()
print(nums)       # [1, 1, 2, 3, 4, 5, 6, 9]
nums.append(7)
print(nums)       # [1, 1, 2, 3, 4, 5, 6, 9, 7]

增加:append / insert / extend

lst = [1, 2]
lst.append(3)          # 末尾加一个 → [1, 2, 3]
lst.insert(0, 0)       # 下标0插入 → [0, 1, 2, 3]
lst.extend([4, 5])     # 末尾加多个 → [0, 1, 2, 3, 4, 5]
print(lst)

append 将整个实参作为单个元素追加,extend 则把可迭代对象中的元素逐个展开追加:

a = [1, 2]
a.append([3, 4])    # [1, 2, [3, 4]],嵌套进去
b = [1, 2]
b.extend([3, 4])    # [1, 2, 3, 4],展开追加
print(a, b)

删除:remove / pop / clear

lst = [1, 2, 3, 2, 4]
lst.remove(2)        # 删除第一个出现的 2 → [1, 3, 2, 4]
print(lst)
lst.pop()            # 删末尾并返回 → 4
print(lst)           # [1, 3, 2]
lst.pop(1)           # 删下标1 → 3
print(lst)           # [1, 2]
lst.clear()          # 清空
print(lst)           # []

查找:index / count

nums = [5, 1, 5, 3, 5]
print(nums.index(3))     # 2,第一个 3 的下标
print(nums.count(5))     # 3,5 出现几次
# print(nums.index(9))   # 找不到抛 ValueError

排序与反转

nums = [3, 1, 2]
nums.sort()           # 原地升序
print(nums)           # [1, 2, 3]
nums.sort(reverse=True)  # 原地降序
print(nums)           # [3, 2, 1]
nums.reverse()        # 原地反转
print(nums)           # [1, 2, 3]

元素为字符串的列表同样可按字典序排序:

words = ["banana", "apple", "cherry"]
words.sort()
print(words)          # ['apple', 'banana', 'cherry']

复制:copy

a = [1, 2, 3]
b = a.copy()      # 浅拷贝,独立的一份
b.append(4)
print(a, b)       # [1, 2, 3] [1, 2, 3, 4]

改原列表还是返回新值

方法是否改原列表说明
append / insert / extend改添加元素
remove / pop / clear改删除元素
sort / reverse改排序、反转
index / count不改查询
copy不改返回新列表

另有若干内置函数常与列表配合使用,但不属于列表方法,例如 sorted()、len()、sum()、min()、max()。sorted() 返回新列表,原列表保持不变:

nums = [3, 1, 4, 1, 5]
print(sorted(nums))   # [1, 1, 3, 4, 5] 新列表
print(nums)           # [3, 1, 4, 1, 5] 原列表没动
print(sum(nums), min(nums), max(nums))   # 14 1 5

本节归纳了 Python 列表方法的分类及是否原地修改。下一篇介绍列表推导式:用一行表达式由可迭代对象生成列表。