一、前言
在 Python 编程中,集合(set
)是一种非常实用的数据结构,它能够存储一组无序且不重复的元素。集合广泛应用于数据去重、交并差运算等场景。
本文将重点讲解 Python 中集合的创建方式,包括使用大括号 {}
、set()
函数、从其他序列转换等多种方法,并通过丰富的代码示例帮助你掌握其用法。
二、什么是集合?
✅ 定义:
集合是 Python 中的一种可变数据类型,表示为 set
,用于存储无序且不重复的元素集合。
⚠️ 特点:
- 元素不可重复
- 无索引,不能通过下标访问
- 支持数学集合操作(如并集、交集、差集)
- 可动态添加或删除元素
三、Python 集合的创建方式
✅ 1. 使用大括号 {}
创建集合
s = {1, 2, 3, 4}
print(s) # 输出: {1, 2, 3, 4}
⚠️ 注意事项:
- 空集合不能用
{}
,这会创建一个空字典(dict
)!
empty_dict = {} # 空字典
empty_set = set() # 空集合
✅ 2. 使用 set()
函数创建集合
这是最常用的方式之一,尤其适用于将其他序列(如列表、字符串、元组)转换为集合。
示例:
# 从列表转集合
s1 = set([1, 2, 3, 2])
print(s1) # 输出: {1, 2, 3}# 从字符串转集合
s2 = set("hello")
print(s2) # 输出: {'h', 'e', 'l', 'o'}# 从元组转集合
s3 = set((1, 2, 3, 2))
print(s3) # 输出: {1, 2, 3}
✅ 3. 使用推导式创建集合(Set Comprehension)
类似于列表推导式,集合也支持推导式语法,用于快速生成集合。
示例:
# 生成 0~9 的平方集合
squares = {x**2 for x in range(10)}
print(squares)
# 输出: {0, 1, 64, 4, 36, 9, 16, 49, 25, 81}
✅ 4. 从其他集合创建新集合
你可以通过复制、合并等方式创建新的集合。
示例:
a = {1, 2, 3}
b = set(a) # 复制集合 a
c = a.copy() # 同样复制print(b) # 输出: {1, 2, 3}
print(c) # 输出: {1, 2, 3}
✅ 5. 使用集合运算创建新集合
可以通过集合运算符或方法来创建新的集合。
a = {1, 2, 3}
b = {3, 4, 5}# 并集
union_set = a | b
print(union_set) # 输出: {1, 2, 3, 4, 5}# 交集
intersection_set = a & b
print(intersection_set) # 输出: {3}
四、创建集合时的常见问题与注意事项
场景 | 建议 |
---|---|
是否可以包含列表? | ❌ 不可以,集合中的元素必须是不可变类型(如数字、字符串、元组) |
是否可以嵌套集合? | ❌ 不允许直接嵌套普通集合(可用 frozenset 替代) |
如何判断是否为空集合? | ✅ 使用 not s 或 len(s) == 0 |
创建集合时顺序是否保留? | ❌ 集合是无序的,输出顺序可能不同 |
五、集合与其他数据结构的对比(创建方式)
类型 | 创建方式 | 示例 | 是否可变 | 是否允许重复 |
---|---|---|---|---|
列表(list ) | [] / list() | [1, 2, 3] | ✅ 是 | ✅ 允许 |
元组(tuple ) | () / tuple() | (1, 2, 3) | ❌ 否 | ✅ 允许 |
字典(dict ) | {} / dict() | {'a': 1, 'b': 2} | ✅ 是(值可变) | ❌ 键不允许重复 |
集合(set ) | set() / {} | {1, 2, 3} | ✅ 是 | ❌ 不允许重复 |
六、实际应用示例
✅ 示例1:去除列表中的重复项
nums = [1, 2, 2, 3, 4, 4, 5]
unique_nums = list(set(nums))
print(unique_nums) # 输出: [1, 2, 3, 4, 5](顺序可能变化)
⚠️ 注意:如果需要保留原始顺序,应避免使用
set()
直接转换。
✅ 示例2:从字符串提取唯一字符
text = "hello world"
unique_chars = set(text.replace(" ", ""))
print(unique_chars)
# 输出: {'w', 'r', 'd', 'l', 'o', 'h', 'e'}
✅ 示例3:用户标签去重统计
user1_tags = ["python", "web", "data"]
user2_tags = ["java", "web", "mobile"]all_tags = set(user1_tags + user2_tags)
print(all_tags)
# 输出: {'python', 'web', 'data', 'java', 'mobile'}
七、冻结集合(frozenset)
如果你希望创建一个不可变的集合,可以使用 frozenset()
。
fs = frozenset([1, 2, 3])
print(fs) # 输出: frozenset({1, 2, 3})
fs.add(4) # 报错:AttributeError: 'frozenset' object has no attribute 'add'
✅ 优势:
- 可作为字典的键
- 可作为其他集合的元素
八、总结对比表:集合的创建方式
创建方式 | 语法 | 是否推荐 | 说明 |
---|---|---|---|
使用 {} | {1, 2, 3} | ✅ 推荐 | 快速创建非空集合 |
使用 set() | set([1, 2, 3]) | ✅ 推荐 | 更通用,适用于任何可迭代对象 |
集合推导式 | {x**2 for x in range(10)} | ✅ 推荐 | 快速构造集合 |
从已有集合复制 | set(a) / a.copy() | ✅ 推荐 | 安全地复制集合 |
使用集合运算 | `a | b/ a.union(b)` | ✅ 推荐 |
冻结集合 | frozenset([1, 2, 3]) | ✅ 推荐 | 创建不可变集合 |
九、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!