Python 学习笔记:集合(Set)

一、概述

集合(Set)是 Python 中的一种内置数据结构,主要用于存储唯一的元素。集合的主要特点包括:

  • 无序性:集合中的元素没有固定的顺序,不能通过索引访问。
  • 唯一性:集合中的每个元素都是唯一的,不能重复。
  • 可变性:集合是可变的,可以动态添加、删除元素。

集合通常用于数据去重、数学集合运算(如并集、交集等)以及高效查找数据。

二、集合的创建

集合可以通过花括号 {}set() 函数来创建。需要注意的是,空集合只能用 set() 函数创建,而使用 {} 创建的是一个空字典。

示例

# 使用花括号创建集合
my_set = {1, 2, 3, 4}
print(my_set)  # 输出: {1, 2, 3, 4}

# 使用 set() 函数创建集合
another_set = set([1, 2, 3])
print(another_set)  # 输出: {1, 2, 3}

# 创建空集合
empty_set = set()
print(empty_set)  # 输出: set()

# 创建含重复元素的集合
duplicate_set = {1, 1, 2, 3}
print(duplicate_set)  # 输出: {1, 2, 3}(重复元素被自动去掉)
三、集合的基本操作
1. 添加元素

可以使用 add() 方法向集合中添加一个元素。如果元素已经存在,集合不会发生变化。

示例

my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}
2. 删除元素

可以使用 remove()discard()pop() 方法删除集合中的元素。

  • remove():如果元素不存在,将引发 KeyError

    my_set.remove(2)
    print(my_set)  # 输出: {1, 3, 4}
    
  • discard():如果元素不存在,不会引发错误。

    my_set.discard(5)  # 不会报错
    print(my_set)  # 输出: {1, 3, 4}
    
  • pop():随机删除并返回集合中的一个元素。如果集合为空,会引发 KeyError

    removed_element = my_set.pop()
    print(removed_element)  # 输出: 随机选择的元素
    print(my_set)           # 输出: 剩下的元素
    
3. 清空集合

使用 clear() 方法可以清空集合中的所有元素。

示例

my_set.clear()
print(my_set)  # 输出: set()
4. 集合的长度

使用 len() 函数可以获取集合中元素的数量。

示例

my_set = {1, 2, 3}
print(len(my_set))  # 输出: 3
四、集合的数学运算

集合支持多种数学运算,包括并集、交集、差集和对称差集。

1. 并集(Union)

使用 union() 方法或 | 运算符计算并集。

示例

set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set)  # 输出: {1, 2, 3, 4, 5}

# 也可以使用 |
union_set = set1 | set2
print(union_set)  # 输出: {1, 2, 3, 4, 5}
2. 交集(Intersection)

使用 intersection() 方法或 & 运算符计算交集。

示例

intersection_set = set1.intersection(set2)
print(intersection_set)  # 输出: {3}

# 也可以使用 &
intersection_set = set1 & set2
print(intersection_set)  # 输出: {3}
3. 差集(Difference)

使用 difference() 方法或 - 运算符计算差集。

示例

difference_set = set1.difference(set2)
print(difference_set)  # 输出: {1, 2}

# 也可以使用 -
difference_set = set1 - set2
print(difference_set)  # 输出: {1, 2}
4. 对称差集(Symmetric Difference)

使用 symmetric_difference() 方法或 ^ 运算符计算对称差集。

示例

symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set)  # 输出: {1, 2, 4, 5}

# 也可以使用 ^
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set)  # 输出: {1, 2, 4, 5}
五、集合关系运算

集合也支持一些关系运算,比如子集、超集和不相交等:

  • 子集:使用 issubset() 方法检查一个集合是否是另一个集合的子集。

    set1 = {1, 2}
    set2 = {1, 2, 3, 4}
    print(set1.issubset(set2))  # 输出: True
    
  • 超集:使用 issuperset() 方法检查一个集合是否是另一个集合的超集。

    print(set2.issuperset(set1))  # 输出: True
    
  • 不相交:使用 isdisjoint() 方法检查两个集合是否没有交集。

    set3 = {4, 5, 6}
    print(set1.isdisjoint(set3))  # 输出: True
    
六、遍历集合

可以使用 for 循环遍历集合中的元素:

my_set = {1, 2, 3, 4}
for element in my_set:
    print(element)  # 输出: 集合中的每个元素(顺序可能不同)
七、冻结集合(frozenset)

frozenset 是不可变的集合,创建后不能修改。适用于需要集合但不希望其改变的场景。

示例

frozen_set = frozenset([1, 2, 3, 4])
print(frozen_set)  # 输出: frozenset({1, 2, 3, 4})

# frozen_set.add(5)  # 会引发 AttributeError
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值