Python容器4大顶流:列表、元组、字典、集合的区别

阅读此文:你将秒懂Python四大容器类型该怎么选择

🌈嘿,小伙伴们~

今天跟大家盘一盘Python容器数据类型的四大顶流——列表[list]、元组(tuple)、字典{dict}、集合{set}掌握它们共同招式和独门绝技的你,就如同手执魔刀千刃的伍六七,战力直接拉满,嘎嘎强!

图片

🎯先来个全家桶总览下相同与差异点

四大数据结构的共同点

①都是容器类型:都能存储多个元素

②都支持多种数据类型:可以混合存储不同类型的数据(如:int/str/float等)

③都支持迭代:都可以用for循环遍历

④都支持in操作:都可以用in判断元素是否存在

⑤都是Python内置类型:无需导入任何模块

⑥都支持len()函数:能用len()获取元素数量

四大数据结构核心区别对照表

图片

注意:集合和字典均使用花括号{}表示,但使用有差别,如d={}是创建一个空字典,若要创建一个空集合的话则要用d=set()。同样元组使用的小括号(),为避免与普通表达式混淆,在定义只有一个元素的元组时,要在元素后面加逗号如t=(88,)

四种类型使用案例如下:

1.列表(list)——你的万能工具箱

示例代码如下:

# 创建1个购物车列表
shopping_car = ["牛奶", "面包", "鸡蛋"]

# 动态操作(列表的优势!)
# 增加数据
shopping_car.append("苹果")
# 移除数据,如第二个
shopping_car.pop(1)
# 修改数据,如第一个
shopping_car[0] = "酸奶"
print(shopping_car)  

📌代码运行结果:

# 输出:['酸奶', '鸡蛋', '苹果']

🌱什么时候用列表?

  • 需要保持记录顺序

  • 存在频繁增-删-改

  • 比如:待办事项、日志流水记录

2.元组(tuple)——不可变的保险箱

示例代码如下:

# 定义配置信息(不许修改)
DATABASE_CONFIG = (
    "127.0.0.1",  # 主机
    3306,       # 端口
    "admin",  # 用户名
    "123456",  # 密码
)

# 安全使用配置
host, port, user, pwd = DATABASE_CONFIG
print(f"正在连接{host}:{port}...")

# 若尝试修改元组的内容,会报错!!!
DATABASE_CONFIG[0] = "192.168.1.1"  # 报错!

📌代码运行结果:

正在连接127.0.0.1:3306...

另,元组还常见于函数有多个返回值时:

# 定义一个多返回值的函数
def get_user_info(user_id): 
    return ("王小明", 28, "工程师") 
# 姓名  # 年龄  # 职业
name, age, job = get_user_info(1001)
print(f"{name}({age}岁)是一名{job}")

🌱什么时候用元组?

  • 数据一旦写入就焊死,不想被该

  • 需要作为字典键(字典的Key不重复)

  • 比如:作为配置项、函数返回值

3.字典(dict)——闪电般的查找器

示例代码如下:

# 构建用户数据字典
users = {101: {"name": "小明", "age": 18}, 102: {"name": "小红", "age": 20}}

# 闪电查找(比列表快N倍!)
print(users[102]["name"])  # 输出:小红

# 增加数据
users[103] = {"name": "小刚", "age": 22}
# 修改数据
users[102] = {"name": "小哈哈", "age": 22}
# 删除数据
del users[101]
print(users)  

📌代码运行结果:

小红
{102: {'name': '小哈哈', 'age': 22}, 103: {'name': '小刚', 'age': 22}}

🌱什么时候用字典?

  • 需要键-值映射

  • 快速查找需求

  • 比如:参数列表、配置文件

4.集合(set)——去重小能手

示例代码如下:

# 构造1个数字集合
input_numbers = {12, 5, 8, 12, 8}
# 输出:{8, 12, 5} 自动去重!
print(input_numbers)

# 集合运算(超方便)
A = {1, 2, 3}
B = {2, 3, 4}

print(A | B)  # 并集:{1, 2, 3, 4}
print(A & B)  # 交集:{2, 3}
print(A - B)  # 差集:{1}

🌱什么时候用集合?

  • 需要去除重复值

  • 集合运算交 / 并 / 差 

  • 比如:过滤黑名单、求共同好友

🏆性能对决(查找速度实测)

💡场景设定:生成1~10000个数据分别装入这4种容器中,派发寻找容器中最后一个数据的任务,测试不同容器查找出结果所耗费的时间,示例代码如下

import time
# 准备10万个数据
data_range = 100000
lst = list(range(data_range))
tpl = tuple(range(data_range))
st = set(range(data_range))
dct = {i: i for i in range(data_range)}

# 测试不同容器类型的查找速度
def test_speed(container):
    start = time.time()
    # 查找最后一个元素
    x = data_range - 1 in container
    return time.time() - start

print(f"列表查找耗时:{test_speed(lst):.6f}s")
print(f"元组查找耗时:{test_speed(tpl):.6f}s")
print(f"集合查找耗时:{test_speed(st):.6f}s")
print(f"字典查找耗时:{test_speed(dct):.6f}s")

📌运行结果:

列表查找耗时:0.000949s
元组查找耗时:0.000480s
集合查找耗时:0.000000s
字典查找耗时:0.000000s

⚡ 结论:大数据量查找,字典和集合完胜!

列表 & 元组:从头扫到尾,逐个对比直到命中或见底,慢的像排队过安检
集合 & 字典:底层是哈希表,通过哈希值瞬间定位,几乎零遍历,快如闪电

使用时选择的流程:

图片

结语:

🚀记住这些区别,能在编程时做出最佳的选择!


📌了解更多,可关注我的微信公众号:“ Python-伍六七 ”,及时拿一手资讯和应用案例!

Python四大容器的特点https://mp.weixin.qq.com/s/Kb608kI-LOrhcnN5StqqTg


————————————————

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值