set与frozenset以及set中的运算详解

Set 与 Frozenset 的基本概念

Set 是 Python 中的一种内置数据类型,用于存储无序且不重复的元素集合。Set 是可变的,意味着可以在创建后添加或删除元素。Frozenset 是 Set 的不可变版本,一旦创建,其内容无法更改。

# 创建 Set
my_set = {1, 2, 3, 4}

# 创建 Frozenset
my_frozenset1 = frozenset([1, 2, 3, 4])
#输出 frozenset({1, 2, 3, 4})
my_frozenset2 = frozenset("abcd")
#输出 frozenset({'b', 'c', 'd', 'a'})

Set 中的基本运算

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

并集 (Union)

并集操作返回两个集合中所有元素的集合。

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

交集操作返回两个集合中共同存在的元素。

intersection_set = set1 & set2  # 或者使用 set1.intersection(set2)
print(intersection_set)  # 输出: {3}
差集 (Difference)

差集操作返回第一个集合中存在但第二个集合中不存在的元素。

difference_set = set1 - set2  # 或者使用 set1.difference(set2)
print(difference_set)  # 输出: {1, 2}
对称差集 (Symmetric Difference)

对称差集操作返回两个集合中不重复的元素。

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

Set 的更新操作

Set 是可变的,因此可以通过多种方法更新集合。

添加元素

使用 add 方法向集合中添加单个元素。

my_set.add(5)
print(my_set)  # 输出: {1, 2, 3, 4, 5}
更新集合

使用 update 方法向集合中添加多个元素。

my_set.update([6, 7, 8])
print(my_set)  # 输出: {1, 2, 3, 4, 5, 6, 7, 8}
删除元素

使用 removediscard 方法从集合中删除元素。remove 在元素不存在时会抛出异常,而 discard 不会。

my_set.remove(8)
print(my_set)  # 输出: {1, 2, 3, 4, 5, 6, 7}

my_set.discard(9)  # 不会抛出异常

Frozenset 的特性

Frozenset 是不可变的,因此不支持添加或删除元素的操作。但 Frozenset 支持与 Set 相同的集合运算。

frozenset1 = frozenset([1, 2, 3])
frozenset2 = frozenset([3, 4, 5])

# 并集
union_frozenset = frozenset1 | frozenset2
print(union_frozenset)  # 输出: frozenset({1, 2, 3, 4, 5})

# 交集
intersection_frozenset = frozenset1 & frozenset2
print(intersection_frozenset)  # 输出: frozenset({3})

Set 与 Frozenset 的应用场景

Set 适用于需要频繁修改集合内容的场景,而 Frozenset 适用于需要不可变集合的场景,例如作为字典的键或另一个集合的元素。

# 使用 Frozenset 作为字典的键
my_dict = {frozenset([1, 2]): "value"}
print(my_dict)  # 输出: {frozenset({1, 2}): 'value'}

通过理解 Set 和 Frozenset 的特性及其运算,可以更灵活地处理集合数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值