在 Python 编程中,对容器类型进行元素的添加和删除是最基础也最频繁的操作。掌握不同数据结构对应的 API,不仅能提升编码效率,还能避免因误用导致的运行时错误。本文以 list、dict、set、str、stack、queue 六种常见类型为例,整理其添加与删除元素的标准方法,并附上可直接运行的代码示例。
---
## 1. list 列表
列表支持多种添加和删除方式,适用于不同场景。
| 操作 | API | 示例 |
|------|-----|------|
| 尾部添加 | append(x) | arr.append(4) |
| 指定位置插入 | insert(i, x) | arr.insert(1, 99) |
| 添加多个元素 | extend(iterable) | arr.extend([5, 6]) |
| 删除最后一个 | pop() | arr.pop() |
| 删除指定下标 | pop(i) | arr.pop(0) |
| 删除指定值 | remove(x) | arr.remove(99) |
| 删除指定下标 | del arr | del arr[1] |
| 清空 | clear() | arr.clear() |
演示代码:- arr = [1, 2, 3]
- arr.append(4) # [1, 2, 3, 4]
- arr.insert(1, 99) # [1, 99, 2, 3, 4]
- arr.extend([5, 6]) # [1, 99, 2, 3, 4, 5, 6]
- arr.pop() # 删除最后一个元素,返回6
- arr.pop(0) # 删除下标0的元素,返回1
- arr.remove(99) # 删除第一个值为99的元素
复制代码
注意:remove() 只会删除第一个匹配项,若值不存在会抛出 ValueError。
---
## 2. dict 字典
字典以键值对形式存储,添加和删除都通过键来操作。
| 操作 | API | 示例 |
|------|-----|------|
| 添加/修改 | dict[key] = value | mp["a"] = 1 |
| 删除指定 key | pop(key) | mp.pop("a") |
| 删除指定 key | del dict[key] | del mp["a"] |
| 安全删除(带默认值) | pop(key, 默认值) | mp.pop("x", None) |
| 清空 | clear() | mp.clear() |
演示代码:- mp = {}
- mp["a"] = 1
- mp["b"] = 2
- mp["a"] = 100 # 修改 a 的值
- mp.pop("b") # 删除 b,返回2
- mp.pop("x", None) # x 不存在,返回 None 而不报错
复制代码
使用 pop(key, default) 可以避免 KeyError,适合不确定键是否存在的场景。
---
## 3. set 集合
集合是无序不重复元素的容器,添加和删除均有“安全”版本。
| 操作 | API | 示例 |
|------|-----|------|
| 添加一个元素 | add(x) | s.add(4) |
| 添加多个元素 | update(iterable) | s.update([5, 6]) |
| 删除指定元素 | remove(x) | s.remove(3) |
| 安全删除 | discard(x) | s.discard(10) |
| 随机删除一个 | pop() | s.pop() |
| 清空 | clear() | s.clear() |
演示代码:- s = {1, 2, 3}
- s.add(4) # {1, 2, 3, 4}
- s.update([5, 6]) # {1, 2, 3, 4, 5, 6}
- s.remove(3) # 删除3,若不存在则 KeyError
- s.discard(10) # 10不存在,无操作,不报错
复制代码
推荐使用 discard() 代替 remove() 以简化错误处理。
---
## 4. 字符串 str
字符串是不可变对象,不能直接增删字符,只能通过生成新字符串来间接实现。
错误示例:- s = "abc"
- s[0] = "x" # TypeError: 'str' object does not support item assignment
复制代码
正确做法:- s = "abc"
- s = s + "d" # "abcd"
- s = s.replace("a", "x") # "xbcd"
复制代码
字符串的“添加”实际是拼接或替换后重新赋值,原字符串未被修改。
---
## 5. 栈 stack
Python 推荐用 list 模拟栈,利用 append 入栈、pop 出栈。
- stack = []
- stack.append(1) # [1]
- stack.append(2) # [1, 2]
- stack.pop() # 返回2,栈变为[1]
复制代码
时间复杂度:append 和 pop 均为 O(1)。
---
## 6. 队列 queue
队列遵循先进先出,[collections.deque] 是高效的双端队列,推荐用于队列操作。
| 操作 | API | 示例 |
|------|-----|------|
| 入队(右端) | append(x) | q.append(1) |
| 出队(左端) | popleft() | q.popleft() |
演示代码:- from collections import deque
- q = deque()
- q.append(1) # deque([1])
- q.append(2) # deque([1, 2])
- q.popleft() # 返回1,队列变为deque([2])
复制代码
使用 deque 的 popleft() 比 list 的 pop(0) 效率更高(O(1) vs O(n))。
---
## 最常用记忆版
| 类型 | 添加 | 删除 |
|------|------|------|
| list | append() / insert() / extend() | pop() / remove() |
| dict | mp[key] = value | pop(key) / del mp[key] |
| set | add() / update() | discard() / remove() |
| stack | append() | pop() |
| queue | append() | popleft() |
熟练掌握这些 API 可以让你在处理 Python 数据时更加得心应手,避免低级错误。建议配合实际项目练习,加深记忆。 |