以下是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元素必须可哈希)
© 版权声明
文章版权归作者所有,未经允许请勿转载。





牛
收藏了,感谢分享