Python set怎么用?集合创建、添加删除元素和常见操作详解?

文章导读
Previous Quiz Next Python 中的集合 在 Python 中,set 是一个无序的唯一元素集合。与列表或元组不同,set 不允许重复值,即 set 中的每个元素必须是唯一的。set 是可变的,这意味着在创建 set 后可以添加或移除元素。
📋 目录
  1. Python 中的集合
  2. 在 Python 中创建集合
  3. set 中的重复元素
  4. 向 set 添加元素
  5. 从 set 中移除元素
  6. Set 中的成员测试
  7. Set 操作
  8. Python Set 推导式
  9. 使用 Set 推导式过滤元素
  10. 嵌套 Set 推导式
A A

Python - 集合



Previous
Quiz
Next

Python 中的集合

在 Python 中,set 是一个无序的唯一元素集合。与列表或元组不同,set 不允许重复值,即 set 中的每个元素必须是唯一的。set 是可变的,这意味着在创建 set 后可以添加或移除元素。

set 使用大括号 {} 或内置的 set() 函数来定义。它们特别适用于成员测试、从序列中移除重复项,以及执行常见的数学集合操作,如并集、交集和差集。

set 指一组不同的对象集合。它用于将对象分组并研究它们的属性和关系。set 中的对象称为 set 的元素或成员。

在 Python 中创建集合

在 Python 中创建 set 指的是定义并初始化一个唯一元素集合。这包括指定将包含在 set 中的元素,并确保 set 中的每个元素都是唯一的。

你可以使用大括号 {} 或 set() 函数在 Python 中创建 set −

使用大括号

你可以通过在大括号内列出其元素并用逗号分隔每个元素来直接定义 set,如下所示 −

my_set = {1, 2, 3, 4, 5}
print (my_set)

它将产生以下结果 −

{1, 2, 3, 4, 5}

使用 set() 函数

或者,你可以通过传递一个可迭代对象(如列表或元组)给 set() 函数来创建 set,该可迭代对象包含你想包含在 set 中的元素 −

my_set = set([1, 2, 3, 4, 5])
print (my_set)

我们得到如下所示的输出 −

{1, 2, 3, 4, 5}

set 中的重复元素

Python 中的 set 是唯一元素的无序集合。如果你尝试用重复元素创建 set,重复项将被自动移除 −

my_set = {1, 2, 2, 3, 3, 4, 5, 5} 
print (my_set)

得到的结果如下所示 −

{1, 2, 3, 4, 5}

set 可以包含不同数据类型的元素,包括数字、字符串,甚至其他 set(只要它们是不可变的)−

mixed_set = {1, 'hello', (1, 2, 3)}
print (mixed_set)

产生的结果如下 −

{1, 'hello', (1, 2, 3)}

在 Python 中,set 支持各种基本操作,用于操作其元素。这些操作包括添加和移除元素、检查成员资格,以及执行 set 特定的操作,如并集、交集、差集和对称差集。

向 set 添加元素

要向 set 添加元素,可以使用 add() 函数。这在你想向现有 set 中包含新元素时非常有用。如果元素已在 set 中,set 将保持不变 −

my_set = {1, 2, 3, 3}
# 向 set 添加元素 4
my_set.add(4)  
print (my_set)

以下是得到输出 −

{1, 2, 3, 4}

从 set 中移除元素

你可以使用 remove() 函数从 set 中移除元素。这在你想从 set 中消除特定元素时非常有用。如果元素不存在,将引发 KeyError −

my_set = {1, 2, 3, 4}
# 从 set 中移除元素 3
my_set.remove(3)  
print (my_set)

显示的输出如下所示 −

{1, 2, 4}

或者,你可以使用 discard() 函数在 set 中存在时移除元素。与 remove() 不同,discard() 在 set 中找不到元素时不会引发错误 −

my_set = {1, 2, 3, 4}
# 即使 5 不在 set 中也不会出错
my_set.discard(5)  
print (my_set)

我们得到如下所示的输出 −

{1, 2, 3, 4}

Set 中的成员测试

Set 提供了一种高效的方式来检查元素是否在 set 中存在。你可以使用 in 关键字进行此检查,如果元素存在则返回 True,否则返回 False

my_set = {1, 2, 3, 4}
if 2 in my_set:
   print("2 is present in the set")
else:
   print("2 is not present in the set")

以上代码的输出如下 −

2 is present in the set

Set 操作

在 Python 中,set 支持各种 set 操作,用于操作和比较 set。这些操作包括 union、intersection、difference、symmetric difference 和 subset 测试。Set 在处理唯一元素集合并基于集合理论执行操作时特别有用。

  • Union − 使用 union() function 或 | operator 将两个 set 的元素合并。

  • Intersection − 使用 intersection() function 或 & operator 获取共同元素。

  • Difference − 使用 difference() function 或 - operator 获取在一个 set 中但不在另一个 set 中的元素。

  • Symmetric Difference − 使用 symmetric_difference() method 或 ^ operator 获取在任一 set 中但不在两者中的元素。

Python Set 推导式

Python 中的 set 推导式是一种简洁的方式,根据 iterable 对象创建 set,类似于 list 推导式。它通过对 iterable 中的每个项应用表达式来生成 set。

Set 推导式在需要从应用某些操作或从另一个 iterable 中过滤元素的结果创建 set 时非常有用。

语法

Set 推导式的语法类似于 list 推导式,但使用花括号 { } 而非方括号 [ ] 来表示 set −

set_variable = {expression for item in iterable if condition}

示例

在以下示例中,我们使用 set 推导式创建了一个包含 1 到 5 的数字平方值的 set −

squared_set = {x**2 for x in range(1, 6)}
print(squared_set)

得到的输出如下 −

{1, 4, 9, 16, 25}

使用 Set 推导式过滤元素

你可以在 set 推导式中包含条件语句,根据特定条件过滤元素。例如,要从 1 到 10 创建一个偶数 set,可以使用带有 if 条件的 set 推导式,如下所示 −

even_set = {x for x in range(1, 11) if x % 2 == 0}
print(even_set)

这将产生以下输出 −

{2, 4, 6, 8, 10}

嵌套 Set 推导式

Set 推导式还支持嵌套循环,允许你从嵌套 iterable 创建 set。这对于生成元素的组合或排列非常有用。

示例

nested_set = {(x, y) for x in range(1, 3) for y in range(1, 3)}
print(nested_set)

以上代码的输出如下所示 −

{(1, 1), (1, 2), (2, 1), (2, 2)}

Frozen Sets

在 Python 中,frozen set 是一个不可变的唯一元素集合,类似于普通 set,但区别在于创建后无法修改。一旦创建,frozen set 中的元素无法添加、移除或修改,因此当你需要不可变的 set 时,它是一个合适的选择。

你可以使用 frozenset() function 通过传递一个 iterable(例如 list、tuple 或另一个 set)来创建 frozen set,该 iterable 包含你想要包含在 frozen set 中的元素。

示例

在以下示例中,我们创建了一个整数的 frozen set,然后尝试向其添加一个元素 −

my_frozen_set = frozenset([1, 2, 3])
print(my_frozen_set) 
my_frozen_set.add(4)  

以上代码的输出如下 −

frozenset({1, 2, 3})
Traceback (most recent call last):
  File "/home/cg/root/664b2732e125d/main.py", line 3, in <module>
    my_frozen_set.add(4)
AttributeError: 'frozenset' object has no attribute 'add'