Python容器类型差异操作

Python中提供了多种内置容器类型,用于存储和组织数据。其中最常用的是列表(list)字典(dict)集合(set),它们各有特点,适用于不同的场景。除此之外,Python标准库还提供了许多其他有用的容器类型,如元组、数组、双端队列等。下面我们将详细说明它们的差异、支持的操作,并给出代码示例。


一、列表、字典、集合的差异

类型 是否有序 是否可变 元素是否唯一 访问方式 典型用途
列表(list) 有序(插入顺序) 可变 可重复 整数索引 存储序列数据,支持增删改查
字典(dict) 有序(Python 3.7+) 可变 键唯一,值可重复 键(key) 存储键值对映射关系
集合(set) 无序 可变 唯一 无索引,只能遍历或成员测试 去重、集合运算(并交差)

示例

python 复制代码
# 列表
lst = [1, 2, 3, 2]        # 有序,允许重复
print(lst[0])              # 通过索引访问 → 1

# 字典
dct = {'a': 1, 'b': 2}     # 键值对,键唯一
print(dct['a'])            # 通过键访问 → 1

# 集合
st = {1, 2, 3, 2}          # 自动去重 → {1, 2, 3}
print(2 in st)             # 成员测试 → True

二、类似的其他容器类型

除了上述三种,Python还提供了以下常用容器(部分位于collections模块):

类型 特点 示例
元组(tuple) 有序、不可变、可重复 t = (1, 2, 3)
数组(array) 同类型元素,更节省内存 from array import array; a = array('i', [1, 2, 3])
双端队列(deque) 两端高效插入/弹出 from collections import deque; dq = deque([1, 2, 3])
命名元组(namedtuple) 类似元组,但字段可命名 from collections import namedtuple; Point = namedtuple('Point', ['x', 'y']); p = Point(1, 2)
有序字典(OrderedDict) 记住插入顺序(内置dict已有序,但OrderedDict提供额外方法) from collections import OrderedDict; od = OrderedDict()
默认字典(defaultdict) 访问不存在的键时返回默认值 from collections import defaultdict; dd = defaultdict(int)
计数器(Counter) 字典子类,用于计数 from collections import Counter; c = Counter('abracadabra')
链映射(ChainMap) 将多个字典逻辑合并为一个 from collections import ChainMap
用户列表/字典/字符串(UserList等) 方便继承并自定义行为 from collections import UserList

三、支持的操作详解(增删改查、运算及其他)

1. 列表(list)

  • append()extend()insert()+(拼接)
  • remove()pop()delclear()
  • :直接索引赋值 lst[i] = new_value
  • :索引访问、切片、inindex()count()
  • 运算
    • +:拼接列表 [1,2] + [3,4][1,2,3,4]
    • *:重复列表 [1,2] * 3[1,2,1,2,1,2]
    • 比较:==<(按字典序比较)
  • 其他len()max()min()sorted()、列表推导式、reverse()sort()copy()
python 复制代码
lst = [1, 2]
lst.append(3)          # [1,2,3]
lst.insert(1, 99)      # [1,99,2,3]
lst.remove(2)          # [1,99,3]
popped = lst.pop()     # popped=3, lst=[1,99]
lst[0] = 100           # [100,99]
print(100 in lst)      # True
print(lst + [5,6])     # [100,99,5,6]
print(lst * 2)         # [100,99,100,99]

2. 字典(dict)

  • 增/改d[key] = valueupdate()setdefault()
  • del d[key]pop(key)popitem()clear()
  • d[key](键不存在会报错)、get(key, default)inkeys()values()items()
  • 运算
    • Python 3.9+:| 合并字典 {1:'a'} | {2:'b'}{1:'a', 2:'b'}
    • |= 更新字典
  • 其他len()、字典推导式、copy()fromkeys()
python 复制代码
d = {'a': 1, 'b': 2}
d['c'] = 3             # 增 → {'a':1, 'b':2, 'c':3}
d['a'] = 100           # 改 → {'a':100, 'b':2, 'c':3}
del d['b']             # 删 → {'a':100, 'c':3}
print(d.get('x', 0))   # 查(不存在返回0)→ 0
print('a' in d)        # True
print(d.keys())        # dict_keys(['a', 'c'])
# 合并(Python 3.9+)
d2 = d | {'d': 4}      # {'a':100, 'c':3, 'd':4}

3. 集合(set)

  • add()update()(可添加多个)
  • remove()(元素不存在报错)、discard()(不报错)、pop()(随机弹出一个)、clear()
  • inisdisjoint()issubset()
  • 运算
    • | 并集 {1,2} | {2,3}{1,2,3}
    • & 交集 {1,2} & {2,3}{2}
    • - 差集 {1,2} - {2,3}{1}
    • ^ 对称差集 {1,2} ^ {2,3}{1,3}
    • 比较:<=<>=> 判断子集/超集
  • 其他len()、集合推导式、copy()
python 复制代码
s = {1, 2, 3}
s.add(4)               # {1,2,3,4}
s.discard(2)           # {1,3,4}
s.remove(3)            # {1,4}
print(1 in s)          # True
print(s | {5,6})       # {1,4,5,6}
print(s & {4,5,6})     # {4}
print(s - {4})         # {1}

4. 其他类型的常用操作

  • 元组(tuple) :不可变,所以没有增删改,但支持查(索引、切片、in)、拼接(+)、重复(*)、比较、len()等。

    python 复制代码
    t = (1, 2, 3)
    print(t[1])           # 2
    print(t + (4,))       # (1,2,3,4)
  • 数组(array) :支持类似列表的操作,但元素类型相同。提供append()extend()、索引赋值等。

  • 双端队列(deque) :两端快速操作,append()appendleft()pop()popleft()rotate()等。

  • 默认字典(defaultdict) :当键不存在时自动调用工厂函数生成默认值。

    python 复制代码
    from collections import defaultdict
    dd = defaultdict(list)
    dd['a'].append(1)     # 即使键'a'不存在也会自动创建空列表
  • 计数器(Counter) :类似字典,用于计数,支持most_common()、加减运算(+-)等。

    python 复制代码
    from collections import Counter
    c = Counter('abbccc')
    print(c)              # Counter({'c':3, 'b':2, 'a':1})
    print(c.most_common(2)) # [('c',3), ('b',2)]

四、总结:操作对比表

操作类别 列表 字典 集合 元组 备注
append, insert, extend d[key]=value, update add, update 不可变 字典的"增"同时也是"改"
remove, pop, del del, pop, popitem remove, discard, pop 不可变
索引赋值 键赋值 不可改元素 不可变 集合元素不可变,但可增删
索引、切片、in 键、getin in、子集判断 索引、切片、in
运算 +(拼接), *(重复) ` `(合并, 3.9+) ` (并), &(交), -(差), ^`(对称差)
其他 sort, reverse, 推导式 推导式, keys, values 推导式, 去重 拆包, 命名元组扩展

通过以上对比,你可以根据具体需求选择合适的容器类型,并灵活运用它们提供的丰富操作。Python的容器生态非常强大,熟练掌握它们能极大提升编程效率。

相关推荐
weixin199701080161 小时前
淘宝客商品详情页前端性能优化实战
java·前端·python·性能优化
心歌技术1 小时前
CPU与GPU排序性能对比分析
python·gpu·性能对比·实验
Zhansiqi1 小时前
day37英语
python
进击的小头1 小时前
第7篇:基于传递函数的PI控制器设计
python·算法
七夜zippoe2 小时前
Python错误追踪终极指南:Sentry集成与深度定制实战
数据库·python·sentry·告警策略·错误追踪
DamianGao2 小时前
我用 OpenClaw 做了一个 AI 新闻早报,每天自动推送
人工智能·python·语言模型
Westward-sun.2 小时前
Python argparse 模块:命令行参数解析实战全攻略
python·opencv·机器学习·rpc
Storynone2 小时前
【Day21】LeetCode:93. 复原IP地址,78. 子集,90. 子集 II
python·算法·leetcode
RechoYit2 小时前
项目记录:把 OpenClaw 结合自己的交易项目做成飞书里的 AI Trading Partner-- A 股智能分析机器人
人工智能·python·金融·飞书·投资·openclaw