在 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}
集合中的重复元素
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 中,集合支持各种基本操作用于操控它们的元素。这些操作包括添加和移除元素、检查成员资格以及执行集合特有的运算如并集、交集、差集和对称差等。
在集合中添加元素
要向集合中添加一个元素,你可以使用 add()
方法。当你想要将新元素加入现有的集合时这是有用的。如果元素已经在集合中,则集合保持不变:
my_set = {1, 2, 3, 3}
my_set.add(4)
print(my_set)
以下是所得到的输出:
{1, 2, 3, 4}
从集合中移除元素
你可以使用 remove()
方法从集合中移除一个元素。当你想要从集合中移除特定元素时这是有用的。如果元素不存在,则会抛出一个 KeyError
:
my_set = {1, 2, 3, 4}
my_set.remove(3)
print(my_set)
显示的输出如下所示:
{1, 2, 4}
或者,你可以使用 discard()
方法来移除集合中的元素,如果元素存在的话。与 remove()
不同,discard()
在找不到元素时不会抛出错误:
my_set = {1, 2, 3, 4}
my_set.discard(5)
print(my_set)
我们得到的输出如下:
{1, 2, 3, 4}
在集合中进行成员测试
集合提供了一种有效的方式来检测某个元素是否存在于集合中。你可以使用 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
集合运算
在 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}
使用集合推导过滤元素
你可以在集合推导中包含条件语句来根据某些标准过滤元素。例如,要创建一个从 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)}
冷冻集合(Frozen Sets)
在 Python 中,冷冻集合是一种不可变的独特元素集合,与常规集合相似,但区别在于创建后不能被修改。一旦创建,冷冻集合内的元素不能被添加、移除或修改,这使得它在需要不可变集合时是一个合适的选择。
你可以通过传递一个包含你想包含在冷冻集合中的元素的可迭代对象(如列表、元组或其他集合)来使用 frozenset()
函数创建一个冷冻集合。
示例
在下面的例子中,我们创建一个整数的冷冻集合,然后尝试向其中添加一个元素:
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'