Python 集合之旅

在本教程中,我将介绍 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,与 的区别set277set1但不在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大本营】等你来玩奥~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值