Python - 集(sets)



Python 中的集(set)

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

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

集是指不同对象的集合。它用于将对象分组在一起并研究其属性和关系。集中的对象称为 element 或 set 的成员。

在 Python 中创建 Set

在 Python 中创建集合是指定义和初始化唯一元素的集合。这包括指定将成为集合一部分的元素,确保每个元素在集合中都是唯一的。

您可以在 Python 中使用大括号 {} set() 函数 −

使用大括号

您可以通过在大括号内列出其元素来直接定义一个集合,用逗号分隔每个元素,如下所示 -


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

它将产生以下结果 -

{1, 2, 3, 4, 5}

使用 set() 函数

或者,您可以使用 set() 函数通过传递包含要包含在集合中的元素的可迭代对象(如列表或元组)来创建集合 -


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

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

{1, 2, 3, 4, 5}

Set 中的重复元素

Python 中的集合是唯一元素的无序集合。如果您尝试创建具有重复元素的集,则会自动删除重复项 -


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

获得的结果如下所示 -

{1, 2, 3, 4, 5}

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


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

生成的结果如下 -

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

在 Python 中,集合支持用于操作其元素的各种基本操作。这些操作包括添加和删除元素、检查成员资格以及执行特定于集的操作,如 union、intersection、difference 和 symmetric difference。

在 Set 中添加元素

要将元素添加到集合中,您可以使用 add() 函数。当您希望将新元素包含在现有集中时,这非常有用。如果该元素已存在于集合中,则该集合将保持不变 -


my_set = {1, 2, 3, 3}
# Adding an element 4 to the set
my_set.add(4) 	
print (my_set)

以下是获得的输出 -

{1, 2, 3, 4}

从 Set 中删除元素

您可以使用 remove() 函数从集合中删除元素。当您想要从集合中消除特定元素时,这非常有用。如果元素不存在,则会引发 KeyError -


my_set = {1, 2, 3, 4}
# Removes the element 3 from the set
my_set.remove(3) 	
print (my_set)

显示的输出如下所示 -

{1, 2, 4}

或者,你可以使用 discard() 函数从集合中删除元素(如果存在)。与 remove() 不同,如果在集合中找不到元素,discard() 不会引发错误 -


my_set = {1, 2, 3, 4}
# No error even if 5 is not in the set
my_set.discard(5) 	
print (my_set)

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

{1, 2, 3, 4}

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 中,集合支持各种集合操作,用于操作和比较集合。这些操作包括并集、交集、差值、对称差值和子集测试。在处理唯一元素的集合和执行基于集合论的操作时,集合特别有用。

  • 联合 − 使用 union() 函数或 | 运算符组合两个集合中的元素。
  • 交集 - 用于使用intersection()函数或&运算符获取常见元素。
  • 差异 - 用于使用 difference() 函数或 - 运算符获取在一个集合中但不在另一个集合中的元素。
  • 对称差值 - 用于使用 symmetric_difference() 方法或 ^ 运算符获取位于任一集合中但不在两个集合中的元素。

Python 集合推导式

Python 中的集合推导式是一种基于可迭代对象创建集合的简洁方法,类似于列表推导式。它用于通过对可迭代对象中的每个项目应用表达式来生成集合。

当你需要从应用某些操作或过滤另一个可迭代对象元素的结果创建一个集合时,集合推导式很有用。

语法

集合推导式的语法类似于列表推导式,但使用大括号 { } 来表示集合 − ,而不是方括号 [ ]。


 set_variable = {expression for item in iterable if condition}

在下面的示例中,我们将使用集合推导式 - 创建一个包含从 1 到 5 的数字平方的集合 -


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

获得的输出如下 -

{1, 4, 9, 16, 25}

使用集合推导式过滤元素

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


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

这将产生以下输出 -

{2, 4, 6, 8, 10}

嵌套集推导式

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


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)}

冻结集

在 Python 中,冻结集是唯一元素的不可变集合,类似于常规集,但区别在于它在创建后无法修改。一旦创建,冻结集中的元素就不能被添加、删除或修改,因此当你需要一个不可变的集合时,它是一个合适的选择。

您可以使用 frozenset() 函数在 Python 中创建冻结集,方法是传递包含要包含在冻结集中的元素的可迭代对象(例如列表、元组或其他集)。

在下面的示例中,我们将创建一组冻结的整数,然后向其添加一个元素 -


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'