Python集合的创建

59 阅读4分钟

一、前言

在 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}✅ 是(值可变)❌ 键不允许重复
集合(setset() / {}{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()✅ 推荐安全地复制集合
使用集合运算`ab/a.union(b)`✅ 推荐
冻结集合frozenset([1, 2, 3])✅ 推荐创建不可变集合

九、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!