python 列表、元组、集合和字典

总览对比表

类型 符号 是否可变 是否有序 允许重复元素 能否索引 核心用途
列表 list [] ✅可变 ✅有序 ✅允许重复 ✅ arr[0] 有序数据、可增删改,存储报文序列、多行日志
元组 tuple () ❌不可变 ✅有序 ✅允许重复 ✅ t[0] 固定不变数据、函数返回值、字典 key
集合 set {} ✅可变 ❌无序 ❌禁止重复 ❌无索引 去重、交集 / 差集(过滤重复 CAN ID)
字典 dict {k:v} ✅可变 ✅有序 (python3.7+) key 不重复 ✅按键取值 键值映射(报文 ID→数据、配置参数)

补充:不可变 = 创建后不能原地修改;可变 = 支持增、删、改元素

列表list []

有序、可变、允许重复

python 复制代码
# 创建
lst = [1, 2, "can报文", 3.14]

# 常用操作
lst.append(4)          # 尾部追加
lst.insert(1, 99)      # 指定位置插入
lst.pop()              # 删除末尾,返回元素
lst.remove(2)          # 删除第一个匹配值
lst[0] = 100           # 修改元素
print(lst[0])          # 通过下标访问

# 切片
lst[1:3]

# 遍历
for item in lst:
    pass

元组 tuple ()

有序、不可变、允许重复 一旦创建,不能增删改内部元素

python 复制代码
# 创建
t = (123, 0x18ff0001, "chassis")
# 单元素元组必须加逗号
t_single = (5,)

print(t[0])

# 不支持 t[0]=99 直接报错!

# 常用:打包多个返回值
def get_can_info():
    return (0x123, 8, [0x11,0x22])

can_id, dlc, data = get_can_info()

适合场景:CAN ID + 长度这种固定组合、常量定义、作为字典的键

小知识点:元组里面如果嵌套列表,列表内元素依然可以修改,只是元组本身不能新增 / 删除成员。

集合set {}

无序、可变、自动去重、不能索引

python 复制代码
# 创建
s = {0x123, 0x456, 0x123}
print(s)   # {0x123, 0x456} 自动去重

s.add(0x789)        # 添加元素
s.discard(0x456)    # 删除(不存在不报错)

# 集合运算(非常适合报文分析)
a = {0x101,0x102,0x103}
b = {0x102,0x103,0x104}
print(a & b)   # 交集:两边都存在的CAN ID
print(a | b)   # 并集:全部ID合并
print(a - b)   # 差集:a有b没有

# 空集合不能写 {},必须 set()
empty_set = set()

字典dict {key:value}

有序、可变,key 唯一不可重复 key 必须是不可变类型:int、str、tuple;列表 / 集合不能当 key

python 复制代码
# 创建:CAN ID映射报文描述
can_map = {
    0x1801: "电池电压报文",
    0x1802: "电机温度报文"
}

# 取值
print(can_map[0x1801])
print(can_map.get(0x9999, "未知报文")) # 推荐,不存在不抛异常

# 新增/修改
can_map[0x1803] = "车速信号"

# 删除
del can_map[0x1801]

# 遍历
for k in can_map:
    pass
for k, v in can_map.items():
    pass

合场景:协议解析、报文 ID 映射、存储键值形式日志字段

注意事项

1. 空对象写法

python 复制代码
[]      # 空列表
()      # 空元组
set()   # 空集合 ❌{}是空字典
{}      # 空字典

2. 哪些能哈希、可以放入集合 / 字典 key

✅ int,str,tuple(内部不含可变对象)

❌ list、set、dict 不能作为 set 元素 /dict 键

3. 使用场景

  • 需要按顺序存放多条报文 → list
  • 固定一组参数不希望被修改 → tuple
  • 需要去重 CAN ID、对比报文集合 → set
  • 根据报文 ID 快速查找解析规则 → dict
相关推荐
昵称画1 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
“AI国潮设计-小江”1 小时前
【AIGC实战】Python+SDXL批量生成“潮汕英歌舞不倒翁”IP | 角色一致性与多场景融合方案,附完整代码
开发语言·人工智能·python·prompt·aigc
传奇开心果编程1 小时前
【Rust入门练中学】第6课:结构体与方法
开发语言·rust·结构体·编程语言理论·结构体方法·编程通用语言
Linux_cy1 小时前
服务器管理工具哪个好用?我用了七八个
运维·服务器·javascript·python·ssh·面板·gmssh
MoRanzhi12031 小时前
第6篇(下)· 使用 PyQt5 实现 2048 高性能计算版:统一运行控制与跨模式安全交接
python·pyqt·进程管理·状态机·软件架构·并发控制·数据一致性
code tsunami2 小时前
【无标题】
开发语言·python
CodeGL2 小时前
10、Python基础之进程和线程
开发语言·python
TechWayfarer3 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
2601_967980114 小时前
Python列表操作方法详解
python·数据类型·修改·列表操作·功能汇总
卡卡~~4 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法