Python基础-Python中集合Set的高级操作介绍

liftword4个月前 (02-26)技术文章32

在之前的分享中,我们介绍了关于Python中Set集合的简单操作,实际上在Python中还提供了关于Set集合更多强大的操作功能,下面我们就来详细看看这些高级功能的使用。

交集、并集、差集和对称差集

两个集合的交集表示该操作会返回两个集合中都存在的元素而组成的一个新的集合。代码如下所示。

# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}

# 交集
intersection = set1.intersection(set2)
print("Intersection:", intersection)  # Output: {4, 5}

两个集合的并集表示该操作会返回两个集合中所有唯一的元素所组成的一个新的集合,代码如下所示。

# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}

# 并集
union = set1.union(set2)
print("Union:", union)  # Output: {1, 2, 3, 4, 5, 6, 7, 8}

两个集合的差集表示只会返回存在于第一个集合中的元素,也就是说如果有两个集合set1和set2,那么set1.difference(set2) 返回 {1, 2, 3},即只包含在 set1 中但不在 set2 中的元素。如下所示。

# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}

# 差集
difference = set1.difference(set2)
print("Difference:", difference)  # Output: {1, 2, 3}

两个集合的对称差集,表示返回两个集合中仅存在于其中一个集中的元素所组成的元素集合。也就是说set1.symmetric_difference(set2) 返回 {1, 2, 3, 6, 7, 8},即包含在 set1set2 中但不同时存在于两者中的元素。如下所示。

# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}

# 对称差集
symmetric_difference = set1.symmetric_difference(set2)
print("Symmetric Difference:", symmetric_difference)  # Output: {1, 2, 3, 6, 7, 8}

集合操作符

在集合操作中也可以直接使用符号来进行上述的操作。如下所示。

  • &: 交集操作符。
  • |: 并集操作符。
  • -: 差集操作符。
  • ^: 对称差集操作符。

给出上述操作示例代码如下所示。

# 使用操作符进行集合操作
intersection_op = set1 & set2
union_op = set1 | set2
difference_op = set1 - set2
symmetric_difference_op = set1 ^ set2

print("Intersection (Operator):", intersection_op)  # Output: {4, 5}
print("Union (Operator):", union_op)  # Output: {1, 2, 3, 4, 5, 6, 7, 8}
print("Difference (Operator):", difference_op)  # Output: {1, 2, 3}
print("Symmetric Difference (Operator):", symmetric_difference_op)  # Output: {1, 2, 3, 6, 7, 8}

子集和超集检查

子集和超集的检查,就是就是判断一个集合是否为另一个集合的子集,或者是超集,子集表示该集合的元素要比原来集合的少,而超集则表示该集合比原集合的数据元素多,如下所示。

# 子集和超集检查
subset_check = {1, 2}.issubset(set1)
superset_check = set1.issuperset({1, 2})

print("Subset Check:", subset_check)  # Output: True
print("Superset Check:", superset_check)  # Output: True
  • issubset():判断一个集合是否是另一个集合的子集。
  • issuperset():判断一个集合是否是另一个集合的超集。

集合推导式

在之前我们也介绍过集合推导式,表示允许通过某些条件来创建一个新的集合操作。如下所示。

# 集合推导式
evens = {x for x in range(10) if x % 2 == 0}
print("Set Comprehension:", evens)  # Output: {0, 2, 4, 6, 8}

增强赋值操作

增强赋值操作的意思就是说,可通过一种简单的方式来更新集合数据,而不需要新的赋值操作。如下所示。

set1.update({6, 7})
print("Updated set1:", set1)  # Output: {1, 2, 3, 4, 5, 6, 7}

set1.intersection_update(set2)
print("Intersection Update:", set1)  # Output: {4, 5}

set1.difference_update(set2)
print("Difference Update:", set1)  # Output: set()
  • update(): 将一个集合的元素添加到另一个集合中。
  • intersection_update(): 保留两个集合的交集并更新原始集合。
  • difference_update(): 从一个集合中移除与另一个集合相同的元素并更新原始集合。
  • symmetric_difference_update(): 将两个集合中仅存在于一个集合中的元素添加到原始集合中。

集合的复制

可以通过使用copy()方法或set()构造函数进行集合的复制。

# 复制集合
copy_of_set1 = set1.copy()
print("Copy of set1:", copy_of_set1)  # Output: set()

删除操作

通过如下的方法可以对集合中的元素进行删除操作,如下所示。

  • remove():删除集合中的指定元素,如果元素不存在,则引发 KeyError 异常。
  • discard():删除集合中的指定元素,如果元素不存在,则不执行任何操作。
  • pop():随机删除并返回集合中的一个元素。
# 删除操作
set1.remove(4)
print("After removing 4:", set1)  # Output: {5}

set1.discard(5)
print("After discarding 5:", set1)  # Output: set()

popped_element = set2.pop()
print("Popped element from set2:", popped_element)  # Output: Some element from set2

清空集合

通过clear()函数来清空集合中的所有元素操作。

# 清空集合
set2.clear()
print("Cleared set2:", set2)  # Output: set()

总结

以上就是Set集合操作的一些高级操作,当然在实际使用的时候需要结合实际情况来灵活应变,这样才能发挥出集合高级操作的作用。

相关文章

python之list(set())函数_python的list函数

list(set())函数:对原列表去重并按从小到大排序list(set(a))方法set(a)将列表a转换为集合,集合是一个包含不重复元素的无序序列,然后再使用list将集合转换为列表。若要实现不改...

Python Set Difference():完整指南

Python 集和它们提供的四大操作:交集:两个集合有共同的元素。Union : 两个集合中的所有元素。区别:元素存在于一组但不存在于另一组。对称差异:两个集合中不存在于另一个集合中的元素。请考虑下图...

Poerty - 更好的Python依赖管理库

还在使用 pip 和 setuptools 来进行Python的依赖管理吗?那你就已经落伍了。来看看 Poetry吧,这个依赖管理库为Python带来了全新的体验。简介Poetry,是 python-...

Python四大数据结构 list,tuple,set,dict 的特点与使用语法

python里面有四大数据结构:列表list,元组tuple,集合set,字典dict列表list列表的元素可以重复列表里面元素的类型可以是任意的列表是可变的,可以对列表的元素进行修改或者删除列表是有...

[oeasy]python0128_unicode_字符集_character_set_八卦_星座

unicode 回忆上次内容中国的简体和繁体汉字字符数量都超级大彼此还认对方为乱码如果有一种编码所有的字符都能编进去就好了中日韩(CJK)欧洲拼音梵文阿拉伯文卢恩字符等等等都包括进去添加图片注释,不超...