
list 列表[]特性: (1) 有序、可变 (增删改)、允许重复元素 (2) 下标索引访问lst[0]场景顺序存储需要频繁增删、修改循环收集数据lst[1,2,2,abc]lst.append(3)lst[0]99print(lst)tuple 元组()特性: (1) 有序、不可变创建后不能修改、追加、删除、允许重复 (2) 下标索引访问注意元组内部如果放列表列表本身还可以变场景数据保护不希望被修改函数返回多个值字典的 keyt(1,2,2,abc)# t[0] 99 #报错不可修改t2(1,[2,3])t2[1].append(4)# 内部列表可变print(t2)# (1, [2, 3, 4])## 核心本质**tuple 不可变 (immutable)**不能原地增、删、修改元素。## 所有增删改操作都只能**生成一个新元组**旧元组保持不变。# 1 下标索引取值t(10,20,30,40)print(t[0])# 10print(t[-1])# 40# 2 切片print(t[1:3])# (20, 30)# 3 in 判断元素是否存在print(20int)# True# index / countt(1,2,2,3)print(t.index(2))# 1返回元素第一次出现下标print(t.count(2))# 2统计出现次数## 增加元素增 ❌ 不能原地添加只能新建## 不能用 append() / extend()会报错。# 方式 1 拼接新元组 old (4) 错误(4)只是数字不是元组old(1,2,3)new_tupleold(4,)# (4,) 必须带逗号代表单元素元组print(new_tuple)# (1, 2, 3, 4)print(old)# (1, 2, 3) 旧的没变# 方式 2list 中转适合批量加元素t(1,2,3)lstlist(t)lst.append(4)lst.append(5)new_ttuple(lst)print(new_t)# (1, 2, 3, 4, 5)## 删除元素删 ❌ 不能原地删 没有 .remove() / .pop()# 切片拼接生成新元组t(10,20,30,40)# 删除下标为1的元素 20new_tt[:1]t[2:]print(new_t)# (10, 30, 40)# del只能删除整个元组变量不能删里面某个项t(1,2,3)delt# print(t) # NameError变量已经删掉## 修改元素改 ❌ 不能原地修改t(1,2,3)# t[0] 99 # TypeError: tuple object does not support item assignment# 修改思路转列表→改→转回元组t(1,2,3)lstlist(t)lst[0]99new_ttuple(lst)print(new_t)# (99, 2, 3)# 一个特殊坑元组里面嵌套可变对象# 元组存的是**引用地址**如果元素是 list可以修改列表内部内容t(1,[2,3],4)t[1].append(99)print(t)# (1, [2, 3, 99], 4)# 元组本身的引用没变化所以合法使用场景建议1.数据不需要改动优先tuple安全、哈希可作为字典 key2.数据后续要增删改直接用list不要强行用元组折腾转换速记对比表操作list (列表)tuple (元组)查lst[i]、index、countt[i]、index、count增append / extend / insert无方法拼接新元组 /list 中转删pop / remove / del无方法切片生成新元组改lst[i]x不可原地改转 list 再改set 集合{} 特性: (1)无序、可变、元素唯一自动去重、不能重复 (2) ❌没有下标索引不能s[0]场景去重、成员快速判断、交集并集差集运算s{1,2,2,3}print(s)# {1,2,3} 自动去重s.add(4)s.remove(1)dict 字典{key:value}Python3.7 插入顺序有序特性: (1) key‑value 键值对存储 (2) key 必须不可变 (str,int,tuple)value 任意类型 (3) key 唯一 (4) 字典{key: value}key 不可变字符串、数字、元组value 任意类型无序3.7 保留插入顺序场景映射关系查表存储对象属性# #增添加新键值对d{name:tom,age:20}print(d[name])d[age]21############1.最常用字典[新key] 值 ,如果 key 已经存在这条语句变成「修改」不会新增。d{}d[name]张三d[age]20print(d)# {name: 张三, age: 20}############2.update () 批量新增 / 更新d{name:张三}# 方式1传字典d.update({age:20,city:北京})# 方式2关键字参数d.update(gender男)print(d)# {name: 张三, age: 20, city: 北京, gender: 男}############3. setdefault ()不存在才新增存在不改动d{name:张三}d.setdefault(age,18)# age不存在 → 添加d.setdefault(name,李四)# name已存在 → 无变化print(d)# {name: 张三, age: 18}#查读取数据############1. 下标取值 d[key]key 不存在直接报错 KeyErrord{name:张三,age:20}print(d[name])# 张三# print(d[phone]) # KeyError############2. .get () 推荐不存在返回默认值不会报错print(d.get(name))# 张三print(d.get(phone))# Noneprint(d.get(phone,未填写))# 未填写############3. 判断 key 是否存在 in 注意in 默认查**键**不是值print(nameind)# Trueprint(张三ind)# False# 查询值是否存在print(张三ind.values())# True############4. 获取所有键 / 值 / 键值对print(d.keys())# dict_keys([name, age])print(d.values())# dict_values([张三, 20])print(d.items())# dict_items([(name, 张三), (age, 20)])# 遍历fork,vind.items():print(k,v)#三、改修改已有 key 的值############1. d[已存在key] 新值d{name:张三,age:20}d[age]25print(d)# {name: 张三, age: 25}############2. update () 覆盖旧值,区别setdefault **不能改旧值**只能新增。d.update({age:30})print(d)#四、删删除键值对############1. pop (key) 删除指定键返回被删除的值key 不存在报错d{name:张三,age:20}resd.pop(age)print(res)# 20print(d)# {name: 张三}############2. popitem () 删除**最后插入**的键值对3.7返回 (k,v)d{a:1,b:2}itemd.popitem()print(item)# (b, 2)print(d)# {a: 1}############3. del 语句删除指定键或者删掉整个字典变量d{name:张三,age:20}deld[age]print(d)# {name: 张三}# 删除整个字典变量# del d# print(d) # NameError############4. clear () 清空字典内容字典对象还在d{name:张三}d.clear()print(d)# {}四容器速查表list /tuple/set /dict操作list 列表tuple 元组set 集合dict 字典增append / extend / insert 拼接生成新元组add() / update()d[key]val / update() / setdefault()查lst[index], index(), count()t[index], index(), count()x in sd[key] / get() / keys()/values()/items()改lst[index]val不可原地修改转 list无修改概念d [key] 新值删pop() / remove() / del / clear切片生成新元组remove() / discard() / pop() / clearpop(key) / popitem() / del / clear()高频坑点dict 的 key 不能是 list /set可变类型不能哈希可以用 tupled[xxx]取不到键会报错优先用.get()更安全in判断字典默认判断 key不是 value其他常见容器类型(1) str 字符串 虽然是文本但也是字符容器 1 有序、不可变可索引texthelloprint(text[0])# h# text[0]H 报错不可修改(2) frozenset 冻结集合 set 的不可变版本 1 无序、元素唯一、不可增删改可以作为字典 key 场景需要集合但数据不能改动当做字典 keyfsfrozenset([1,2,3])# fs.add(4) 报错(3) collections 模块高级容器非常实用 ① deque 双端队列 列表append/pop尾部很快头部pop(0)很慢deque 专门优化头尾操作 场景队列、栈消息缓冲区爬虫任务队列fromcollectionsimportdeque dqdeque([1,2,3])dq.append(4)dq.appendleft(0)#头部添加dq.popleft()#头部弹出O(1)超快print(dq) ② defaultdict 带默认值字典 解决普通字典访问不存在 key 时报错 场景分组统计fromcollectionsimportdefaultdict ddefaultdict(list)d[fruit].append(apple)print(d[fruit]) ③ OrderedDict 有序字典 Python3.7 普通 dict 已经保序现在很少用早期版本用它保证顺序 ④ Counter 计数器统计元素频次 场景词频统计、去重计数fromcollectionsimportCounter cCounter([1,1,2,2,2,3])print(c)# Counter({2: 3, 1: 2, 3: 1})print(c[2])#3 ⑤ namedtuple 具名元组 给元组字段起名字可读性高 场景轻量数据对象不用创建 classfromcollectionsimportnamedtuple Pointnamedtuple(Point,[x,y])pPoint(10,20)print(p.x,p.y)