Python基础入门 Day66:集合(set)基础与常用操作

32次阅读
没有评论

共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。

集合(set)是 Python 内置的无序、元素不可重复的数据结构,常用于数据去重与高效的成员检测(平均 O(1))。集合的元素必须可哈希(如数字、字符串、元组),而列表、字典等不可直接作为元素。

一、创建集合与去重

# 花括号或 set() 创建
s1 = {1, 2, 3, 3, 2}
print(s1)  # {1, 2, 3} 自动去重

# 从可迭代对象创建(常用于列表去重)lst = [1, 2, 2, 3, 4, 4]
s2 = set(lst)           # {1, 2, 3, 4}
unique_lst = list(s2)   # 再转回列表(顺序会丢失)

如果需要“去重且保序”,可配合字典键或 OrderedDict 实现。

二、增删查改(集合为可变类型)

s = {1, 2}
s.add(3)                # 添加单个元素 -> {1, 2, 3}
s.update([3, 4, 5])     # 批量添加 -> {1, 2, 3, 4, 5}

s.remove(5)             # 删除存在的元素;不存在会报错 KeyError
s.discard(99)           # 删除不存在也不会报错
x = s.pop()             # 随机删除并返回一个元素(集合无序)s.clear()               # 清空

三、常用集合运算(并、交、差、对称差)

a = {1, 2, 3}
b = {3, 4, 5}

print(a | b)   # 并集 -> {1, 2, 3, 4, 5}
print(a & b)   # 交集 -> {3}
print(a - b)   # 差集 -> {1, 2}
print(a ^ b)   # 对称差集 -> {1, 2, 4, 5}

这些运算也有对应方法:a.union(b), a.intersection(b), a.difference(b), a.symmetric_difference(b)

四、关系判断

x = {1, 2}
y = {1, 2, 3}
z = {4, 5}

print(x.issubset(y))    # True  子集
print(y.issuperset(x))  # True  超集
print(x.isdisjoint(z))  # True  不相交

五、成员测试与遍历

s = {10, 20, 30}
print(20 in s)      # True,平均 O(1) 查找
for v in s:
    print(v)        # 无序遍历

六、集合推导式

# 生成平方集合(自动去重)squares = {n*n for n in [1, 2, 2, 3, 3, 4]}
print(squares)  # {16, 1, 4, 9}

七、不可变集合:frozenset

fs = frozenset([1, 2, 3])
# fs.add(4)  # 不可变,无法添加 / 删除
# 但可作为字典键或另一个集合的元素
d = {fs: "immutable key"}

八、典型应用场景
1)快速去重:从日志或 CSV 读入后用 set 去重;
2)高效查找:用集合保存“黑名单 / 白名单”进行成员判断;
3)集合运算:计算共同好友(交集)、推荐差异(对称差集)。

小结:集合提供了简洁高效的去重与集合运算能力;在需要快速成员测试、集合逻辑运算的场景下,应优先考虑使用 setfrozenset

正文完
 0
评论(没有评论)