python必须掌握的20个核心函数—list()、dict()和set()
以下是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元素必须可哈希)
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!