数据结构是编写Python脚本的基石。它们以一种精心设计的方式存储数据,使得数据处理更加高效。因此,了解如何与数据结构协同工作是至关重要的。
集合是一种特殊的数据结构,具有以下特点:
由于集合是无序的,不能对集合执行索引和切片操作。同时,集合中不能包含可变对象,如列表。集合的一个常见用途是从组合或序列中移除重复项。
在本报告中,将探讨集合的5个常用操作。首先,来看如何创建一个集合。可以使用集合构造函数来从不同的集合创建一个集合。
mylst = ['A', 'A', 'B', 'A', 'C', 'B']
myst = set(mylst)
print(myst)
# 输出: {'A', 'B', 'C'}
从一个列表中创建了一个集合,集合只包含列表中的唯一元素。集合构造函数也可以应用于NumPy数组。以下是相关代码:
import numpy as np
arr = np.random.randint(0, 5, size=20)
myst = set(arr)
print(arr)
# 输出: [4 0 4 3 1 1 3 0 0 1 3 4 0 3 2 4 1 4 3 3]
print(myst)
# 输出: {0, 1, 2, 3, 4}
1. 添加和删除元素
添加和删除元素是集合操作中最基本的方法。使用add和remove方法可以实现这一功能:
myst.add(5)
print(myst)
# 输出: {0, 1, 2, 3, 4, 5}
myst.add(4)
print(myst)
# 输出: {0, 1, 2, 3, 4, 5}
myst.remove(4)
print(myst)
# 输出: {0, 1, 2, 3, 5}
2. 更新集合
更新集合意味着将另一个集合的元素添加到原始集合中。以下是如何更新集合的示例:
myst = set([0, 1, 2, 3, 5])
myotherst = set([3, 4, 5, 6, 7])
myst.update(myotherst)
print(myst)
# 输出: {0, 1, 2, 3, 4, 5, 6, 7}
也可以将集合与列表或元组等其他数据结构一起更新。
myst = set([0, 1, 2, 3, 5])
mylst = [1, 2, 10, 11, 12]
myst.update(mylst)
print(myst)
# 输出: {0, 1, 2, 3, 5, 10, 11, 12}
3. 集合合并
更新方法会就地修改集合,这意味着它会改变原始集合。在某些情况下,可能需要合并多个集合而不更新原始集合。union方法可以合并两个集合,可以将其结果赋值给一个新的变量。
myst = {'A', 'B', 'C'}
newst = {'B', 'C', 'D', 'E'}
newst2 = {1, 2, 3}
combinedst = myst.union(newst).union(newst2)
print(myst)
# 输出: {'A', 'B', 'C'}
print(combinedst)
# 输出: {'A', 1, 2, 'D', 'E', 3, 'B', 'C'}
4. 比较集合
两个集合可以根据它们包含的元素进行比较。可以使用issuperset和issubset方法来比较两个集合。
A = {1, 2, 3, 4, 5}
B = {1, 4, 5}
C = {1, 4, 6}
A.issuperset(B)
# 输出: True
B.issubset(A)
# 输出: True
A.issuperset(C)
# 输出: False
如果两个集合包含相同的元素,它们可以被认为是彼此的超集和子集。
D = {1, 4, 5}
E = {1, 4, 5}
D.issuperset(E)
# 输出: True
D.issubset(E)
# 输出: True
5. 交集和差集
集合理论在很多方面与数学中的维恩图相似。可能对一个集合中的元素感兴趣,但不是另一个集合中的元素。此外,可能需要找出两个集合共有的元素。difference和intersection方法可以用来实现这些操作。
A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7, 8}
A.difference(B)
# 输出: {1, 2}
A.intersection(B)
# 输出: {3, 4, 5}
B.difference(A)
# 输出: {6, 7, 8}
集合的分布不影响交集的确定,但差集的确定是基于顺序的。A与B的差集包括了A中有而B中没有的元素,反之亦然。