跳到主要内容

Python 集合

提示
  1. 集合的独特性和多样性:Python 集合存储独特且不重复的元素,支持多种数据类型,但不包括可变类型如列表和字典。
  2. 集合操作的灵活性:集合支持多种操作,包括添加和移除元素、集合的并集、交集、差集和对称差,以及检查集合间的关系(如子集、超集)。
  3. 集合的无序和可变性:集合是无序的,无法通过索引访问;它们是可变的,可进行动态修改,例如添加或删除元素。

集合是一个独特数据的集合。也就是说,集合的元素不能重复。例如,

假设我们想存储关于学生 ID 的信息。由于学生 ID 不能重复,我们可以使用集合。

Python 集合元素

在 Python 中创建集合

在 Python 中,我们通过将所有元素放在花括号 {} 内并用逗号分隔来创建集合。

一个集合可以有任意数量的项,并且它们可能是不同类型的(整数、浮点数、元组、字符串等)。但是集合不能有可变元素,如列表、集合或字典作为其元素。

让我们看一个例子,

# 创建一个整型集合
student_id = {112, 114, 116, 118, 115}
print('学生 ID:', student_id)

# 创建一个字符串类型的集合
vowel_letters = {'a', 'e', 'i', 'o', 'u'}
print('元音字母:', vowel_letters)

# 创建一个混合数据类型的集合
mixed_set = {'Hello', 101, -2, 'Bye'}
print('混合数据类型的集合:', mixed_set)

输出

学生 ID: {112, 114, 115, 116, 118}
元音字母: {'u', 'a', 'e', 'i', 'o'}
混合数据类型的集合: {'Hello', 'Bye', 101, -2}

在上面的示例中,我们通过将所有元素放在花括号 {} 内来创建了不同类型的集合。

注意:当你运行这段代码时,可能会得到不同的顺序。这是因为集合没有特定的顺序。

在 Python 中创建空集合

创建一个空集合有点棘手。空花括号 {} 将在 Python 中创建一个空字典

要创建一个没有任何元素的集合,我们使用没有任何参数的 set() 函数。例如,

# 创建一个空集合
empty_set = set()

# 创建一个空字典
empty_dictionary = { }

# 检查 empty_set 的数据类型
print('empty_set 的数据类型:', type(empty_set))

# 检查 empty_dictionary 的数据类型
print('empty_dictionary 的数据类型', type(empty_dictionary))

输出

empty_set 的数据类型: <class 'set'>
empty_dictionary 的数据类型 <class 'dict'>

这里,

  • empty_set - 使用 set() 创建的空集合
  • empty_dictionary - 使用 {} 创建的空字典

最后我们使用了 type() 函数来知道 empty_set 和 empty_dictionary 分别属于哪个类。

集合中的重复项

让我们看看如果我们试图在集合中包含重复项会发生什么。

numbers = {2, 4, 6, 6, 2, 8}
print(numbers) # {8, 2, 4, 6}

这里,我们可以看到集合中没有重复的项,因为集合不能包含重复项。

在 Python 中添加和更新集合项

集合是可变的。然而,由于它们是无序的,索引没有意义。

我们不能使用索引或切片访问或更改集合的一个元素。集合数据类型不支持它。

向 Python 集合中添加项

在 Python 中,我们使用 add() 方法向集合添加一个项。例如,

numbers = {21, 34, 54, 12}

print('初始集合:',numbers)

# 使用 add() 方法
numbers.add(32)

print('更新后的集合:', numbers)

输出

初始集合: {34, 12, 21, 54}
更新后的集合: {32

, 34, 12, 21, 54}

在上面的示例中,我们创建了一个名为 numbers 的集合。注意这行,

numbers.add(32)

这里,add()32 添加到我们的集合中。

更新 Python 集合

update() 方法用于使用其他集合类型(列表、元组、集合等)更新集合。例如,

companies = {'Lacoste', 'Ralph Lauren'}
tech_companies = ['apple', 'google', 'apple']

companies.update(tech_companies)

print(companies)

# 输出:{'google', 'apple', 'Lacoste', 'Ralph Lauren'}

这里,tech_companies 的所有独特元素都被添加到 companies 集合中。

从集合中移除元素

我们使用 discard() 方法从集合中移除指定元素。例如,

languages = {'Swift', 'Java', 'Python'}

print('初始集合:',languages)

# 从集合中移除 'Java'
removedValue = languages.discard('Java')

print('使用 remove() 后的集合:', languages)

输出

初始集合: {'Python', 'Swift', 'Java'}
使用 remove() 后的集合: {'Python', 'Swift'}

这里,我们使用了 discard() 方法从 languages 集合中移除 'Java'

集合的内置函数

内置函数如 all(), any(), enumerate(), len(), max(), min(), sorted(), sum() 等常用于集合,用于执行不同的任务。

函数描述
all()如果集合的所有元素都为真(或集合为空),则返回 True
any()如果集合的任何元素为真,则返回 True。如果集合为空,则返回 False
enumerate()返回枚举对象。它包含集合中所有项的索引和值作为一对。
len()返回集合中的元素数量(项数)。
max()返回集合中的最大项。
min()返回集合中的最小项。
sorted()从集合中的元素返回一个新的排序列表(不对集合本身进行排序)。
sum()返回集合中所有元素的总和。

在 Python 中遍历集合

fruits = {"Apple", "Peach", "Mango"}

# for 循环访问每个水果
for fruit in fruits:
print(fruit)

输出

Mango
Peach
Apple

查找集合元素数量

我们可以使用 len() 方法来查找集合中元素的数量。例如,

even_numbers = {2,4,6,8}
print('集合:',even_numbers)

# 查找元素数量
print('总元素数量:', len(even_numbers))

输出

集合: {8, 2, 4, 6}
总元素数量: 4

这里,我们使用了 len() 方法来查找集合中元素的数量。

Python 集合操作

Python 集合提供了不同的内置方法来执行数学集合操作,如并集、交集、差集和对称差。

两个集合的并集

两个集合 AB 的并集包括集合 AB 的所有元素。

Python 集合并集

我们使用 | 运算符或 union() 方法来执行集合并集操作。例如,

# 第一个集合
A = {1, 3, 5}

# 第二个集合
B = {0, 2, 4}

# 使用 | 进行并集操作
print('使用 | 进行并集:', A | B)

# 使用 union() 进行并集操作
print('使用 union() 进行并集:', A.union(B))

输出

使用 | 进行并集: {0, 1, 2, 3, 4, 5}
使用 union() 进行并集: {0, 1, 2, 3, 4, 5}

注意A|Bunion() 相当于集合运算 A ⋃ B

集合交集

两个集合 AB 的交集包括集合 AB 之间的共同元素。

Python 集合交集

在 Python 中,我们使用 & 运算符或 intersection() 方法来执行集合交集操作。例如,

# 第一个集合
A = {1, 3, 5}

# 第二个集合
B = {1, 2, 3}

# 使用 & 进行交集操作
print('使用 & 进行交集:', A & B)

# 使用 intersection() 进行交集操作
print('使用 intersection() 进行交集:', A.intersection(B))

输出

使用 & 进行交集: {1, 3}
使用 intersection() 进行交集: {1, 3}

注意A&Bintersection() 相当于集合运算 A ⋂ B

两个集合的差集

两个集合 AB 的差集包括集合 A 中不在集合 B 上的元素。

Python 集合差集

我们使用 - 运算符或 difference() 方法来执行两个集合之间的差集操作。例如,

# 第一个集合
A = {2, 3, 5}

# 第二个集合
B = {1, 2, 6}

# 使用 & 进行差集操作
print('使用 & 进行差集:', A - B)

# 使用 difference() 进行差集操作
print('使用 difference() 进行差集:', A.difference(B))

输出

使用 & 进行差集: {3, 5}
使用 difference() 进行差集: {3, 5}

注意A - BA.difference(B) 相当于集合运算 A - B

两个集合的对称差

两个集合 AB 的对称差包括集合 AB 的所有元素,但不包括共同元素。

Python 集合对称差

在 Python 中,我们使用

^ 运算符或 symmetric_difference() 方法来执行两个集合之间的对称差操作。例如,

# 第一个集合
A = {2, 3, 5}

# 第二个集合
B = {1, 2, 6}

# 使用 & 进行对称差操作
print('使用 ^ 进行对称差:', A ^ B)

# 使用 symmetric_difference() 进行对称差操作
print('使用 symmetric_difference() 进行对称差:', A.symmetric_difference(B))

输出

使用 ^ 进行对称差: {1, 3, 5, 6}
使用 symmetric_difference() 进行对称差: {1, 3, 5, 6}

检查两个集合是否相等

我们可以使用 == 运算符来检查两个集合是否相等。例如,

# 第一个集合
A = {1, 3, 5}

# 第二个集合
B = {3, 5, 1}

# 使用 & 进行差集操作
if A == B:
print('集合 A 和集合 B 相等')
else:
print('集合 A 和集合 B 不相等')

输出

集合 A 和集合 B 相等

在上面的示例中,A 和 B 有相同的元素,所以条件

if A == B

计算结果为 True。因此,在 if 语句内的 print('集合 A 和集合 B 相等') 被执行。

其他 Python 集合方法

Python 集合有许多方法,其中一些我们在上文已经使用过了。下面是一个列表,列出了可用于集合对象的所有方法:

方法描述
add()向集合添加一个元素
clear()移除集合中的所有元素
copy()返回集合的一个副本
difference()返回两个或更多集合的差集作为一个新集合
difference_update()从这个集合中移除另一个集合的所有元素
discard()如果元素是集合的成员,则从集合中移除该元素。(如果元素不在集合中则不执行任何操作)
intersection()返回两个集合的交集作为一个新集合
intersection_update()使用其自身和另一个集合的交集更新集合
isdisjoint()如果两个集合没有交集,则返回 True
issubset()如果另一个集合包含这个集合,则返回 True
issuperset()如果这个集合包含另一个集合,则返回 True
pop()移除并返回集合中任意一个元素。如果集合为空,则引发 KeyError
remove()从集合中移除一个元素。如果该元素不是成员,则引发 KeyError
symmetric_difference()返回两个集合的对称差作为一个新集合
symmetric_difference_update()使用其自身和另一个集合的对称差更新集合
union()返回在一个新集合中的多个集合的并集
update()使用其自身和其他集合的并集更新集合