网站首页 > java教程 正文
以下是Python中list()、dict()和set()三大核心容器函数的对比详解,包含创建方式、特性、应用场景及常见用法:
1. 基本概念对比
函数 | 数据结构 | 元素特性 | 可变性 | 空对象创建 | 元素要求 |
list() | 列表 | 有序、可重复 | 可变 | list() 或 [] | 无特殊要求 |
dict() | 字典 | 键值对(键唯一) | 可变 | dict() 或 {} | 键必须可哈希 |
set() | 集合 | 无序、唯一 | 可变 | set() | 元素必须可哈希 |
2. 创建方式对比
2.1 list()
# 空列表
lst1 = list() # []
lst2 = [] # [] (更推荐)
# 从可迭代对象创建
lst3 = list("abc") # ['a', 'b', 'c']
lst4 = list(range(3)) # [0, 1, 2]
lst5 = list({'a':1, 'b':2}) # ['a', 'b'] (取字典键)
2.2 dict()
# 空字典
d1 = dict() # {}
d2 = {} # {} (更推荐)
# 从键值对创建
d3 = dict(a=1, b=2) # {'a':1, 'b':2}
d4 = dict([('a',1), ('b',2)]) # {'a':1, 'b':2}
d5 = dict(zip(['a','b'], [1,2])) # {'a':1, 'b':2}
2.3 set()
# 空集合
s1 = set() # set() (不能使用{})
# 从可迭代对象创建
s2 = set("hello") # {'h', 'e', 'l', 'o'} (去重)
s3 = set([1,2,2,3]) # {1, 2, 3}
s4 = set({'a':1, 'b':2}) # {'a', 'b'} (取字典键)
3. 核心特性对比
3.1 去重能力
- set():自动去重,适合处理唯一性数据。
set([1,2,2,3]) # {1, 2, 3}
- list()/dict():保留所有元素,需手动去重
3.2 成员检测效率
- set():O(1)时间复杂度,极快
999999 in set(range(1000000)) # 立即返回
list():O(n)时间复杂度,数据量大时慢。
999999 in list(range(1000000)) # 需遍历
- dict():键查询为O(1),与集合相同。
3.3 数据运算
- set():支持并集(|)、交集(&)、差集(-)等数学运算。
{1,2} | {2,3} # {1, 2, 3}
- list()/dict():无内置集合运算,需手动实现。
4. 实际应用场景
4.1list()场景
- 有序数据存储:如时间序列、队列。
tasks = list()
tasks.append("task1")
需要索引访问:
lst = ['a', 'b', 'c']
print(lst[1]) # 'b'
4.2dict()场景
- 键值映射:如配置管理、数据库记录。
user = dict(name="Alice", age=25)
快速查找表:
word_count = dict()
for word in words:
word_count[word] = word_count.get(word, 0) + 1
4.3set()场景
- 去重:
unique_words = set(words)
关系测试:
valid_tags = {"python", "java"}
user_tags = {"python", "c++"}
matched = user_tags & valid_tags # {"python"}
5. 性能注意事项
操作 | list() | dict() | set() |
插入元素 | O(1) | O(1) | O(1) |
查找元素 | O(n) | O(1) | O(1) |
内存占用 | 较小 | 较大 | 较大 |
适合数据量 | 中小型 | 大型 | 大型 |
6. 互相转换技巧
# list -> set (去重)
lst = [1,2,2,3]
unique = set(lst) # {1,2,3}
# dict -> list (取键/值)
d = {'a':1, 'b':2}
keys = list(d) # ['a', 'b']
values = list(d.values()) # [1, 2]
# set -> list
s = {1,2,3}
lst = list(s) # [1,2,3] (顺序不保证)
7. 总结
- 选择依据:
- 需要有序且可重复 → list()
- 需要键值映射 → dict()
- 需要去重或集合运算 → set()
- 通用原则:
- 频繁成员测试优先用set()或dict()
- 数据量小时差异不大,代码可读性更重要
- 注意可变对象的哈希限制(dict键和set元素必须可哈希)
猜你喜欢
- 2025-07-28 JDBC规范五-ResultSet详解(jdbc resultset fetchsize)
- 2025-07-28 Redis教程——数据类型(哈希、集合)
- 2025-07-28 Mybatis框架学习指南-第六节内容(常用的注解)
- 2025-07-28 用车按键指南:SET按键在汽车中的作用及操作流程详解!
- 2025-07-28 JSP request.setAttribute()详解及实例
- 2025-07-28 每天五分钟学习redis之SET命令(redis setns)
- 2025-07-28 python必须掌握的20个核心函数——set()函数
- 2025-07-28 JAVA迭代器模式适用场景优缺点是什么你知道吗,...
- 2025-07-28 redis set 详解(redis set 操作)
- 2025-07-28 Python学不会来打我(12)集合set详解:用法、场景与类型转换
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)