Python - 集合


从数学上讲,集合是不按任何特定顺序排列的项目的集合。Python 集与此数学定义类似,但具有以下附加条件。

  • 集合中的元素不能重复。

  • 集合中的元素是不可变的(无法修改),但集合作为一个整体是可变的。

  • python 集合中的任何元素都没有附加索引。因此它们不支持任何索引或切片操作。

设置操作

Python 中的集合通常用于数学运算,如并、交、差和补等。我们可以创建一个集合,访问它的元素并执行这些数学运算,如下所示。

创建一个集合

集合是通过使用 set() 函数或将所有元素放在一对大括号内来创建的。

例子

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
Months={"Jan","Feb","Mar"}
Dates={21,22,17}
print(Days)
print(Months)
print(Dates)

输出

当执行上面的代码时,会产生以下结果。请注意结果中元素顺序的变化。

set(['Wed', 'Sun', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])
set(['Jan', 'Mar', 'Feb'])
set([17, 21, 22])

访问集合中的值

我们无法访问集合中的单个值。我们只能一起访问所有元素,如上所示。但我们也可以通过循环遍历集合来获取单个元素的列表。

例子

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
 
for d in Days:
   print(d)

输出

执行上述代码时,会产生以下结果 -

Wed
Sun
Fri
Tue
Mon
Thu
Sat

将项目添加到集合中

我们可以使用 add() 方法将元素添加到集合中。再次正如所讨论的,新添加的元素没有附加特定的索引。

例子

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])
 
Days.add("Sun")
print(Days)

输出

执行上述代码时,会产生以下结果 -

set(['Wed', 'Sun', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

从集合中删除项目

我们可以使用discard()方法从集合中删除元素。再次正如所讨论的,新添加的元素没有附加特定的索引。

例子

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])
 
Days.discard("Sun")
print(Days)

输出

当执行上面的代码时,会产生以下结果。

set(['Wed', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

集合并集

对两个集合进行并集运算会生成一个新集合,其中包含这两个集合中的所有不同元素。在下面的示例中,元素“Wed”同时存在于两个集合中。

例子

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA|DaysB
print(AllDays)

输出

当执行上面的代码时,会产生以下结果。请注意,结果只有一个“wed”。

set(['Wed', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

集合的交集

两个集合的交集运算会生成一个新集合,其中仅包含两个集合中的公共元素。在下面的示例中,元素“Wed”同时存在于两个集合中。

例子

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA & DaysB
print(AllDays)

输出

当执行上面的代码时,会产生以下结果。请注意,结果只有一个“wed”。

set(['Wed'])

集合的差异

对两个集合进行差分运算会生成一个新集合,其中仅包含第一个集合中的元素,而不包含第二个集合中的元素。在下面的示例中,元素“Wed”同时存在于两个集合中,因此在结果集中找不到它。

例子

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA - DaysB
print(AllDays)

输出

当执行上面的代码时,会产生以下结果。请注意,结果只有一个“wed”。

set(['Mon', 'Tue'])

比较集

我们可以检查给定的集合是否是另一个集合的子集或超集。结果是 True 或 False,具体取决于集合中存在的元素。

例子

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
SubsetRes = DaysA <= DaysB
SupersetRes = DaysB >= DaysA
print(SubsetRes)
print(SupersetRes)

输出

执行上述代码时,会产生以下结果 -

True
True