Python中str、list、tuple、dict、set 五大内置数据结构详解
初学 Python,最先要攻克的就是内置数据结构!字符串、列表、元组、字典、集合贯穿我们几乎所有代码。很多人只会基础增删改查,遇到场景选型就一脸迷茫:什么时候用列表?什么时候选元组?集合去重原理是什么?字典底层有什么特性?
本文用通俗语言 + 实战案例,系统梳理 5 大核心数据结构,新手友好,建议收藏备查!
一、字符串 str
1.1 基本特性
(1)定义:使用""、''、""""""包裹文本
(2)不可变序列:创建之后不能直接修改内部字符,重新赋值本质是生成新字符串
(3)支持下标索引、切片操作
1.2 常用操作
s = "Hello Python" # 切片 print(s[0:5]) # Hello # 常用方法 print(s.split()) # 分割字符串 print(s.replace("Python","World")) # 替换 print(s.strip()) # 去除首尾空白 print(s.upper(),s.lower()) # 大小写转换1.3 使用场景
存储文本信息(用户名、日志、文件路径)、文本解析。
注意:不要频繁循环拼接字符串
s = s + "xxx",大量拼接推荐"".join()提升效率。
二、列表 list
2.1 基本特性
(1)标识:[],有序可变序列
(2)允许元素重复、支持不同类型元素共存
(3)可变:支持增、删、改、查
2.2 常用操作
lst = [10,20,30] lst.append(40) # 末尾追加 lst.insert(1,15) # 指定位置插入 lst.remove(20) # 删除指定元素 lst.pop() # 删除末尾并返回元素 lst[0] = 99 # 修改元素 print(lst[1:]) # 切片2.3 使用场景
有序数据容器,最常用!存放有序数据、需要随时新增删除元素时优先选 list。
短板:根据值查找元素速度慢,海量数据查询不要只用列表。
三、元组 tuple
3.1 基本特性
(1)标识:(),有序不可变序列
(2)一旦创建,不能增删修改元素
(3)如果元组内嵌套列表,列表里面的数据可以修改(元组约束的是引用地址)
t = (1,2,[3,4]) t[2].append(5) # 合法运行!3.2 使用场景
(1)数据不允许被修改,起到数据保护作用(函数返回多个值本质就是元组)
(2)可作为字典的 key(列表不行)
(3)相比列表占用内存更小
小技巧:只包含一个元素的元组必须写逗号
t=(10,),t=(10)只是数字。
四、字典 dict
4.1 基本特性
(1)标识:{key:value},键值对结构
(2)Python3.7 + 字典默认有序
(3)key 要求:必须是不可变类型(str、int、tuple),key 唯一,重复 key 会覆盖旧值
(4)查询速度极快,底层哈希表实现
4.2 常用操作
d = {"name":"小明","age":18} print(d["name"]) print(d.get("gender","未知")) # get避免键不存在报错 d["age"] = 19 # 修改/新增 print(d.keys()) # 获取所有键 print(d.values()) # 获取所有值 print(d.items()) # 获取键值对4.3 使用场景
需要根据关键字快速查找数据,适合存储具备映射关系的数据,比如用户信息、配置参数。
五、集合 set
5.1 基本特性
(1)标识:{},无序、元素唯一
(2)可变类型;元素同样要求不可变
(3)核心能力:自动去重、集合运算(交集、并集、差集)
空集合不能写
{},{}代表空字典,空集合必须写set()
5.2 常用操作
s = {1,2,3,1} print(s) # {1,2,3} 自动去重 a = {1,2,3} b = {3,4,5} print(a & b) # 交集 {3} print(a | b) # 并集 {1,2,3,4,5} print(a - b) # 差集 {1,2}5.3 使用场景
(1)列表快速去重lst = list(set(lst))
(2)判断两组数据重合、差异对比
结语
以上5种数据结构是Python一切项目的基石,爬虫、数据分析、后端开发全部离不开。光看懂不够,建议大家动手敲一遍示例代码,尝试不同结构互相转换(list转 set、dict转list等),很快就能熟练掌握。
后续我会继续更新数据结构进阶:推导式、深浅拷贝、collections高级容器!
