如何使用Python Set?

2024-04-18 09:29:20 浏览数 (2)

本教程将向您介绍 Python 集合(Set)以及如何使用它们。

译自 What Are Python 'Sets' and How Do You Use Them?,作者 Jack Wallen。

Python 集合(Set)是一种可迭代、可变且不可重复的数据类型。此数据类型非常方便。例如,你需要存储员工 ID 的信息。你肯定不希望这些 ID 在应用程序中重复,因为这可能会导致问题。

例如,你有以下员工 ID:

  • 001
  • 002
  • 003
  • 004

你可以将特定信息附加到每个 ID,例如姓名、电子邮件、电话号码、生日等。如果 ID 重复,数据的交叉授粉可能会导致混乱或应用程序无法按预期运行。

集合可以包含任意数量的项目,甚至可以是不同类型,例如 字符串、整数、元组、浮点数等。

集合的主要用例包括删除重复项、检查集合成员资格以及执行某些数学运算(例如并集、交集、差集和对称差集)。

Python 包含内置的 set() 函数,可以轻松创建集合,如下所示:

代码语言:javascript复制
set1 = set([2, 2, 2, 4, 4, 4, 6, 8, 8, 10])

上面你看到的是一个集合,其中包含一个数字列表,其中一些数字重复。如果我们想确保删除那些重复的数字呢?多亏了 set(),该功能已内置其中。例如,我们可以使用以下行打印 set1

代码语言:javascript复制
print('Set1: ', set1)

我们的整个代码块如下所示:

代码语言:javascript复制
set1 = set([2, 2, 2, 4, 4, 4, 6, 8, 8, 10])
print('Set1: ', set1)

如果我们运行 about,set() 将删除所有重复的数字,因此输出将是:

代码语言:javascript复制
Set1: {2, 4, 6, 8, 10}

请记住,集合还可以包含混合类型,因此我们可以有一个如下所示的集合:

代码语言:javascript复制
set2 = set((1, 1, 3, 5, 'cat', 'dog', 'mouse', 'mouse'))

上面的集合使用元组而不是列表。我们可以为该集合添加一个打印行,如下所示:

代码语言:javascript复制
print('Set2: ', set2)

我们的整个代码块现在如下所示:

代码语言:javascript复制
set1 = set([2, 2, 2, 4, 4, 4, 6, 8, 8, 10])
set2 = set((1, 1, 3, 5, 'cat', 'dog', 'mouse', 'mouse'))
print('Set1: ', set1)
print('Set2: ', set2)

然后输出将是:

代码语言:javascript复制
Set1: {2, 4, 6, 8, 10}
Set2: {1, 3, 'dog', 5, 'cat', 'mouse'}

所有重复项都已删除。

另一种封闭集合的方法是使用 {},如下所示:

代码语言:javascript复制
set3 = {2, 2, 4, 6, 6, 'cat', 'dog', 'mouse', 'mouse', 3.14, (3, 2, 1)}

最终集合的输出将是:

代码语言:javascript复制
Set3: {'cat', 2, 3.14, 'dog', 4, 6, (3, 2, 1), 'mouse'}

需要注意的一件事是,我们确实有一个重复的元素……2。这是怎么回事?因为 (1, 2, 3) 本身就是一个元素。如果我们只复制该元素,则只会打印一个实例。该集合可能如下所示:

代码语言:javascript复制
set3 = {2, 2, 4, 6, 6, 'cat', 'dog', 'mouse', 'mouse', 3.14, (3, 2, 1), (3, 2, 1)}

运行应用程序,Set3 输出将保持不变:

代码语言:javascript复制
Set3: {'cat', 2, 3.14, 'dog', 4, 6, (3, 2, 1), 'mouse'}

因此,(3, 2, 1) 重复项也被删除了。

还可以检查元素是否存在于集合中。这是通过 in 关键字完成的。检查结果将为 TrueFalse

例如,我们想检查 cat 是否在 set3 中,从 print() 语句中,可以这样做:

代码语言:javascript复制
print('cat' in set3)

我们可以将其添加到我们的完整代码块中,如下所示:

代码语言:javascript复制
set1 = set([2, 2, 2, 4, 4, 4, 6, 8, 8, 10])
set2 = set((1, 1, 3, 5, 'cat', 'dog', 'mouse', 'mouse'))
set3 = {2, 2, 4, 6, 6, 'cat', 'dog', 'mouse', 'mouse', 3.14, (3, 2, 1), (3, 2, >
print('cat' in set3)
print('Set1: ', set1)
print('Set2: ', set2)
print('Set3: ', set3)

如果我们运行上述代码,输出将如下所示:

代码语言:javascript复制
True
Set1: {2, 4, 6, 8, 10}
Set2: {1, 3, 5, ‘cat’, ‘mouse’, ‘dog’}
Set3: {2, 3.14, 4, 6, ‘cat’, (3, 2, 1), ‘mouse’, ‘dog’}

我们可以这样运行相反的检查:

代码语言:javascript复制
print('cat' not in set3)

我们的输出现在将如下所示:

代码语言:javascript复制
True
False
Set1: {2, 4, 6, 8, 10}
Set2: {1, 3, 5, ‘cat’, ‘mouse’, ‘dog’}
Set3: {2, 3.14, 4, 6, ‘cat’, (3, 2, 1), ‘mouse’, ‘dog’}

我们还可以创建空集合,如下所示:

代码语言:javascript复制
empty_set1 = set()

然后我们可以对新集合的数据类型运行测试,如下所示:

代码语言:javascript复制
print('Data type of our empty set = ', type(empty_set1))

上述输出将是:

代码语言:javascript复制
*Data type of our empty set = <class ‘set’>*

如果你需要在集合中添加或更新项目,那也是可能的。假设我们的集合是:

代码语言:javascript复制
set1 = {21, 12, 21, 42, 33}

让我们使用以下命令打印该集合:

代码语言:javascript复制
print('Initial Set:',set1)

输出将是:

代码语言:javascript复制
Initial Set: {33, 42, 12, 21}

集合

再次,set() 去掉了重复的 21。

我们可以使用 add() 函数向集合中添加元素,如下所示:

代码语言:javascript复制
set1.add(32)

添加另一行打印更新后的内容,如下所示:

代码语言:javascript复制
print('Updated Set:', set1)

新的输出将是:

代码语言:javascript复制
Initial Set:  {33, 42, 12, 21}
Updated Set: {32, 33, 42, 12, 21}

我们还可以对集合使用 update()。假设我们有两个集合:

代码语言:javascript复制
set1 = {'Tom Sawyer', 'Analog Kid', 'Between The Wheels'}
set2 = {'La Villa Strangiato', 'YYZ', 'Main Monkey Business'}

然后我们使用 update() 函数,如下所示:

代码语言:javascript复制
set1.update(set2)

添加一个打印语句,如下所示:

代码语言:javascript复制
print(set1)

此代码块的输出将是:

代码语言:javascript复制
{‘Tom Sawyer’, ‘Main Monkey Business’, ‘YYZ’, ‘Analog Kid’, ‘Between The Wheels’, ‘La Villa Strangiato’}

最后,我们将使用 discard() 函数从集合中删除一个元素,如下所示:

代码语言:javascript复制
removedValue = set1.discard('Between The Wheels')

我们的代码将如下所示:

代码语言:javascript复制
set1 = {'Tom Sawyer', 'Analog Kid', 'Between The Wheels'}
 
print('Initial Set:',set1)
 
removedValue = set1.discard('Between The Wheels')
 
print('Set after discard:', set1)

我们的输出现在是:

代码语言:javascript复制
Initial Set: {‘Tom Sawyer’, ‘Between The Wheels’, ‘Analog Kid’}
Set after discard: {‘Tom Sawyer’, ‘Analog Kid’}

这就是 Python 中集合的基础知识。当你需要删除重复项或检查各种数据类型的元素时,此功能将派上用场。要详细了解你可以使用集合做什么,请务必查看官方文档。

0 人点赞