在本教程中,我将介绍 Python 中几种不同类型的集合。
在开始之前,让我们定义什么是集合。集合类似于您可以从中添加和删除项目的篮子。在某些情况下,它们是相同类型的项目,而在其他情况下,它们是不同的。基本上,它是一个允许您收集东西的存储结构。
例如,您可能有一种汽车类型。您创建了汽车的多个实例,并希望通过某种方式将所有这些汽车组合在一起并轻松访问它们。这是收藏的完美场景。
该集合将在内存中存在。您不需要构建集合或创建任何类型的脚手架。所有这些都是免费提供的。只需创建一个集合实例并开始添加您的汽车。准备好后,您可以按名称或索引(集合中的位置)将它们拉出。
Python 提供了几种内置类型,它们属于称为集合的模糊类别。虽然 Python 中没有调用正式的类型collection
,但有列表、映射和集合。
在本教程中,我们将介绍以下类型:
- 列表
- 字符串
- 字典
- 套
列表
Python 中的列表是一种称为序列的内置类型。List 是可变的,允许您添加相同类型或不同类型的项目,使它们成为非常通用的构造。Python 列表类似于其他语言中的数组。
Python 列表确实允许您拥有非唯一元素。
以下是创建列表并向其中添加项目的示例:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">alist <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span><span style="color:#c3e88d">"item1"</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">"item2"</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">4</span><span style="color:#c792ea">]</span></code></span></span>
请注意,该列表是异构的,包含字符串和数字类型。
要从列表中检索项目,只需引用该项目的索引。Python 列表是零索引的。如果我想要最后一项,即位置 3,我需要使用索引 2:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">alist<span style="color:#c792ea">[</span><span style="color:#f78c6c">2</span><span style="color:#c792ea">]</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">4</span></code></span></span>
返回数字 4。引用列表项时,只需从其位置减去 1 即可获得正确的索引值。
可以使用以下len
命令检查列表的长度:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-none">len(alist))
> 3</code></span></span>
要将更多项目添加到列表中,请使用以下append()
功能:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">alist<span style="color:#c792ea">.</span>append<span style="color:#c792ea">(</span><span style="color:#ff5874">False</span><span style="color:#c792ea">)</span>
<span style="color:#82aaff">len</span><span style="color:#c792ea">(</span>alist<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">4</span></code></span></span>
我们将列表增加了一个并添加了一种不同的类型——布尔值。该列表根本没有抱怨。
我们可以通过调用删除元素remove()
:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-none">alist.remove("item2")</code></span></span>
remove()
不返回值。该列表将更新,现在包含三个项目:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python"><span style="color:#c792ea">[</span><span style="color:#c3e88d">'item1'</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span> <span style="color:#ff5874">False</span><span style="color:#c792ea">]</span></code></span></span>
还有其他几种方法可以将项目从列表中取出。我们看到了如何使用它的索引来访问一个项目。如果我访问索引 2,我将得到第 3 项:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-none">thevalue = alist[2]
print(thevalue)
> False</code></span></span>
上面的代码将为我们提供该项目的副本。该项目仍在列表中。总列表计数不受影响。
但是,如果我们使用pop()
,我们会得到该项目,但它也会从列表中删除:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">thevalue <span style="color:#89ddff">=</span> alist<span style="color:#c792ea">.</span>pop<span style="color:#c792ea">(</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">)</span>
print<span style="color:#c792ea">(</span>thevalue<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">4</span>
print<span style="color:#c792ea">(</span><span style="color:#c3e88d">"after pop"</span><span style="color:#c792ea">,</span> alist<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> <span style="color:#c792ea">[</span><span style="color:#c3e88d">'item1'</span><span style="color:#c792ea">,</span> <span style="color:#ff5874">False</span><span style="color:#c792ea">]</span></code></span></span>
列表也可以排序。如果我有以下字符串列表:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-none">alpha = ["z", "b", "a", "c"]</code></span></span>
您可以使用以下sort()
命令对其进行排序:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">alpha<span style="color:#c792ea">.</span>sort<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span></code></span></span>
sort()
不返回值。不过,alpha
现在是排序的。您可以通过打印列表来查看:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">print<span style="color:#c792ea">(</span>alpha<span style="color:#c792ea">)</span></code></span></span>
通过调用可以很容易地反转元素reverse()
:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">alpha<span style="color:#c792ea">.</span>reverse<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span></code></span></span>
reverse()
也不返回值,并将反转当前列表。
字符串是列表吗?
字符串与列表有一些相似之处。但是,字符串是不可变的,而列表是可变的。
字符串像列表一样基于索引。您还可以获取字符串中的字符数,就像您可以获取列表中的项目数一样。
例如:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mystring <span style="color:#89ddff">=</span> <span style="color:#c3e88d">"The quick brown fox."</span>
print<span style="color:#c792ea">(</span><span style="color:#82aaff">len</span><span style="color:#c792ea">(</span>mystring<span style="color:#c792ea">)</span><span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">20</span>
print<span style="color:#c792ea">(</span>mystring<span style="color:#c792ea">[</span><span style="color:#f78c6c">4</span><span style="color:#c792ea">]</span><span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> q</code></span></span>
与列表不同,您不能通过附加来添加另一个字符。您也不能更新字符串中的特定元素。
请注意,如果我们尝试将字符分配给字符串中的特定位置会发生什么:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mystring<span style="color:#c792ea">[</span><span style="color:#f78c6c">4</span><span style="color:#c792ea">]</span> <span style="color:#89ddff">=</span> <span style="color:#c3e88d">'z'</span>
<span style="color:#89ddff">></span> TypeError<span style="color:#c792ea">:</span> <span style="color:#c3e88d">'str'</span> <span style="color:#82aaff">object</span> does not support item assignment</code></span></span>
这就是字符串的不可变部分发挥作用的地方。
根据字符串,我们可以将字符串转换为列表。从上面获取我们的mystring
变量。如果我们split()
是字符串,它将默认按空格分割:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">stringlist <span style="color:#89ddff">=</span> mystring<span style="color:#c792ea">.</span>split<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
stringlist
<span style="color:#89ddff">></span><span style="color:#c792ea">[</span><span style="color:#c3e88d">'The'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'quick'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'brown'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'fox.'</span><span style="color:#c792ea">]</span>
<span style="color:#82aaff">type</span><span style="color:#c792ea">(</span>stringlist<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#89ddff"><</span>class <span style="color:#c3e88d">'list'</span><span style="color:#89ddff">></span></code></span></span>
字符串中的每个单词都成为列表中的一个元素。我们还可以看到,类型显然是一个列表。
如果字符串没有空格,我们仍然可以拆分它。但结果会是什么?让我们检查一下:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mystring2 <span style="color:#89ddff">=</span> <span style="color:#c3e88d">"Thequickbrownfox."</span>
stringlist2 <span style="color:#89ddff">=</span> mystring2<span style="color:#c792ea">.</span>split<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
stringlist2
<span style="color:#82aaff">type</span><span style="color:#c792ea">(</span>stringlist2<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">[</span><span style="color:#c3e88d">'Thequickbrownfox.'</span><span style="color:#c792ea">]</span>
<span style="color:#89ddff">></span><span style="color:#89ddff"><</span>class <span style="color:#c3e88d">'list'</span><span style="color:#89ddff">></span></code></span></span>
我们仍然得到一个列表,但这次只有一个元素。最终,在这种情况下拆分字符串并没有多大用处。
映射
映射是另一种内置类型。Python 中唯一可用的映射是字典。字典是基于键/值的。与基于索引的列表不同,我们不使用索引访问字典值。相反,我们使用键访问值。
创建字典类似于创建列表,除了添加键/值对而不是单个项目。这是一个例子:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary <span style="color:#89ddff">=</span> <span style="color:#c792ea">{</span><span style="color:#c3e88d">"item1"</span><span style="color:#c792ea">:</span><span style="color:#f78c6c">45</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">"item2"</span><span style="color:#c792ea">:</span><span style="color:#f78c6c">76</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">"item3"</span><span style="color:#c792ea">:</span><span style="color:#f78c6c">145</span><span style="color:#c792ea">}</span></code></span></span>
每个键/值由冒号分隔。第一部分是键,第二部分是值。在第一项中,item1
是键,45
是值。另外,请注意我们使用大括号而不是括号来包围我们的项目。
从字典中获取项目时,我们考虑的是键,因为通过索引访问是不可能的。如果我们想要item2
,我们使用:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary<span style="color:#c792ea">[</span><span style="color:#c3e88d">"item2"</span><span style="color:#c792ea">]</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">76</span></code></span></span>
我们可以检查字典的长度,就像检查列表的长度一样:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python"><span style="color:#82aaff">len</span><span style="color:#c792ea">(</span>mydictionary<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> <span style="color:#f78c6c">3</span></code></span></span>
要更新item2
,我们使用执行以下操作:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary<span style="color:#c792ea">[</span><span style="color:#c3e88d">"item2"</span><span style="color:#c792ea">]</span> <span style="color:#89ddff">=</span> <span style="color:#f78c6c">100</span></code></span></span>
添加项目与更新的语法相同:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary<span style="color:#c792ea">[</span><span style="color:#c3e88d">"item62"</span><span style="color:#c792ea">]</span> <span style="color:#89ddff">=</span> <span style="color:#f78c6c">433</span></code></span></span>
item62
现在存在于字典中,并且总数增加了一个。
字典项可以通过引用特定键来删除:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">del mydictionary<span style="color:#c792ea">[</span><span style="color:#c3e88d">"item2"</span><span style="color:#c792ea">]</span></code></span></span>
item2
现在已删除。如您所见,字典操作相当简单。
如前所述,字典具有键/值对。如果您只想访问密钥,可以这样做:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary<span style="color:#c792ea">.</span>keys<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> dict_keys<span style="color:#c792ea">(</span><span style="color:#c792ea">[</span><span style="color:#c3e88d">'item3'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'item1'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'item62'</span><span style="color:#c792ea">]</span><span style="color:#c792ea">)</span></code></span></span>
值的访问方式相同:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mydictionary<span style="color:#c792ea">.</span>values<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span> dict_values<span style="color:#c792ea">(</span><span style="color:#c792ea">[</span><span style="color:#f78c6c">145</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">45</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">433</span><span style="color:#c792ea">]</span><span style="color:#c792ea">)</span></code></span></span>
套
集合是不能有重复元素的无序集合。无法对集合进行排序。该sort()
方法不适用于集合。
与列表相比,集合可以比列表更快地检查元素的存在。
要创建一个集合,只需执行以下操作:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">myset <span style="color:#89ddff">=</span> <span style="color:#c792ea">{</span><span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">5</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">}</span></code></span></span>
或者使用 set 方法并提供现有结构。例如:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">mylist <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span><span style="color:#f78c6c">0</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">5</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">7</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">6</span><span style="color:#c792ea">]</span>
myset <span style="color:#89ddff">=</span> <span style="color:#82aaff">set</span><span style="color:#c792ea">(</span>mylist<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">0</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">5</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">7</span><span style="color:#c792ea">}</span></code></span></span>
由于集合只能包含唯一的项目,请注意其中一个重复6
的 s 已被删除。Usingset()
非常适合从现有数据创建独特的项目集合。
如果我尝试添加6
背面,它没有任何效果:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">myset<span style="color:#c792ea">.</span>add<span style="color:#c792ea">(</span><span style="color:#f78c6c">6</span><span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">0</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">5</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">7</span><span style="color:#c792ea">}</span></code></span></span>
要从集合中删除元素,可以调用该remove()
方法:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">myset<span style="color:#c792ea">.</span>remove<span style="color:#c792ea">(</span><span style="color:#f78c6c">4</span><span style="color:#c792ea">)</span></code></span></span>
4
不再在myset
。
集合也不支持索引。尝试访问集合中的元素会抛出错误:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">myset<span style="color:#c792ea">[</span><span style="color:#f78c6c">2</span><span style="color:#c792ea">]</span>
<span style="color:#89ddff">></span>TypeError<span style="color:#c792ea">:</span> <span style="color:#c3e88d">'set'</span> <span style="color:#82aaff">object</span> does not support indexing</code></span></span>
集合有一些独特的方法。如果您熟悉集合的数学运算(差、交和并),这些方法对您来说是众所周知的。
我们将从difference()
. 假设我有这两组:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">set1 <span style="color:#89ddff">=</span> <span style="color:#c792ea">{</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">7</span><span style="color:#c792ea">}</span>
set2 <span style="color:#89ddff">=</span> <span style="color:#c792ea">{</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">8</span><span style="color:#c792ea">,</span><span style="color:#f78c6c">10</span><span style="color:#c792ea">}</span></code></span></span>
使用set1
,与 的区别set2
是7
。7
在set1
但不在set2
。在 Python 中,这如下所示:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">set1<span style="color:#c792ea">.</span>difference<span style="color:#c792ea">(</span>set2<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">7</span><span style="color:#c792ea">}</span></code></span></span>
走另一条路:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">set2<span style="color:#c792ea">.</span>difference<span style="color:#c792ea">(</span>set1<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">8</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">10</span><span style="color:#c792ea">}</span></code></span></span>
如何找到两组中的共同点:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">set1<span style="color:#c792ea">.</span>intersection<span style="color:#c792ea">(</span>set2<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">6</span><span style="color:#c792ea">}</span></code></span></span>
最后,将两个集合组合起来创建一个新集合:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">set3 <span style="color:#89ddff">=</span> set1<span style="color:#c792ea">.</span>union<span style="color:#c792ea">(</span>set2<span style="color:#c792ea">)</span>
<span style="color:#89ddff">></span><span style="color:#c792ea">{</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">6</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">7</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">8</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">10</span><span style="color:#c792ea">}</span></code></span></span>
联合集包括两个集中的所有项目。
概括
我们已经浏览了 Python 列表、字符串(虽然不是序列)、字典和集合。我们已经研究了所有人的具体操作和独特能力。我希望本教程进一步增强了您对 Python 集合的了解。如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~