Python Sets: What, Why and How
Python 配备了几种内置数据类型来帮我们组织数据。这些结构包括列表、字典、元组和集合。
根据 Python 3 文档:集合是一个无序集合,没有重复元素。基本用途包括成员测试和消除重复的条目。集合对象还支持数学运算,如并集、交集、差集和对等差分。
在本文中,我们将回顾并查看上述定义中列出的每个要素的示例。让我们马上开始,看看如何创建它。
初始化一个集合
有两种方法可以创建一个集合:一个是给内置函数 set() 提供一个元素列表,另一个是使用花括号 {}。
使用内置函数 set() 来初始化一个集合:
>>> s1 = set([1, 2, 3])
>>> s1
{1, 2, 3}
>>> type(s1)
使用 {}:
>>> s2 = {3, 4, 5}
>>> s2
{3, 4, 5}
>>> type(s2)
>>>
如你所见,这两种方法都是有效的。但问题是,如果我们想要一个空的集合呢?
>>> s = {}
>>> type(s)
没错,如果我们使用空花括号,我们将得到一个字典而不是一个集合。=)
值得一提的是,为了简单起见,本文中提供的所有示例都将使用整数集合,但集合可以包含 Python 支持的所有 可哈希的
hashable
[1] 数据类型。换句话说,即整数、字符串和元组,而不是列表或字典这样的可变类型。
>>> s = {1, 'coffee', [4, 'python']}
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
既然你知道了如何创建一个集合以及它可以包含哪些类型的元素,那么让我们继续看看为什么我们总是应该把它放在我们的工具箱中。
为什么你需要使用它
写代码时,你可以用不止一种方法来完成它。有些被认为是相当糟糕的,另一些则是清晰的、简洁的和可维护的,或者是 “Python 式的
pythonic
[2]”。
根据 Hitchhiker 对 Python 的建议[3]:当一个经验丰富的 Python 开发人员(Python 人
Pythonista
)调用一些不够 “Python 式的
pythonic
” 的代码时,他们通常认为着这些代码不遵循通用指南,并且无法被认为是以一种好的方式(可读性)来表达意图。
让我们开始探索 Python 集合那些不仅可以