Python基础 – 数据结构(列表)
<h2>灵活多变的列表</h2>
<p>列表又叫List,与元组的结构类似,也可以用于存储多个类型的数据。</p>
<pre class=“language-python line-numbers”><code class=“language-python”>
friendName = [“Kevin”, “Tony”, “Asum”]
print(friendName)
</code></pre>
<p>代码的作用
这2行代码定义了一个叫做“friendName”的列表,并输出了列表中的内容。</p>
<p>第1行代码给这个列表friendName赋值,包含三个字符串数据:Kevin,Tony,Asum。
第2行代码输出了整个列表。</p>
<p><strong>friendName</strong>
变量名,用来存储这个列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-01.png” alt=“” />
<p><strong>[]</strong>
一对中括号,是定义列表的固定格式。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-02.png” alt=“” />
<p><strong> ,</strong>
逗号,列表内部数据之间使用逗号分隔开。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-03.png” alt=“” />
<p><strong>空格</strong>
两个空格,这里的空格不是必须的。
但为了代码美观,建议在逗号后面加一个空格。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-04.png” alt=“” />
<p><strong>字符串</strong>
三个字符串,是friendName这个列表里面包含的具体数据。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-05.png” alt=“” />
<p><strong>代码小结</strong>
我们可以使用图中的格式输出列表中的内容。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-06.png” alt=“” />
<p>我们知道元组中可以存储多种类型的数据。
列表与元组一样,列表中的数据元素可以是任何一种类型,如图所示,整型、浮点型、布尔数等。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-07.png” alt=“” />
<p>除此之外,列表中的数据也可以是整型,浮点型,字符串或布尔数的任意组合。
如图所示,列表mixedList中,包含整型、浮点型和字符串三种数据类型。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-08.png” alt=“” />
<p><strong>取单个元素</strong>
上节学过,使用索引能够获取元组中的元素,列表与元组类似,也可以使用索引。
如图所示,取第一个元素,使用players[0],取第四个元素,就使用players[3](索引从0开始)。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-09.png” alt=“” />
<pre class=“language-python line-numbers”><code class=“language-python”>
players = [“小叮当”, “qian”, “Tang”, “Max”, “杰老板”, “飞飞”]
print(players[2])
print(players[5])
</code></pre>
<p>我们知道索引用于取单个元素,如果要提取列表中的多个连续的元素,该怎么操作呢?
先学习切片的概念。</p>
<h3>切片</h3>
<p>编程中的切片能对元组、列表等有序数据结构进行处理,以截取数据中连续的片段,方便使用。</p>
<pre class=“language-python line-numbers”><code class=“language-python”>
someLetters = [“a”, “b”, “c”, “d”, “e”]
print(someLetters[1:3])
</code></pre>
<p>代码的作用
这段代码做的事情是定义了一个叫做"someLetters"的列表。</p>
<p>第2行代码截取了列表中的第二个和第三个元素。</p>
<p><strong>定义列表</strong>
第1行两侧的一对中括号[],表明数据类型为列表,列表中的每个元素都是字符串。
将列表赋值给变量名someLetters,因此,列表名称为someLetters,列表内容为["a", "b", "c", "d", "e"]。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-10.png” alt=“” />
<p><strong>[]</strong>
第2行中列表+中括号([]),括号中既有数字也有冒号(:),表明要对列表进行切片。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-11.png” alt=“” />
<p><strong>:</strong>
利用切片取元素时,需要使用冒号,用于分隔切片开始的位置和切片终止的位置。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-12.png” alt=“” />
<p><strong>数字</strong>
切片要遵循“<strong>左闭右开</strong>”原则,就是取左边的数据,不取右边的数据,与数学中的区间类似[1, 3),取左不取右。</p>
<p>注意:切片与索引类似,也是从0开始,即第一个元素的索引为0。 </p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-13.png” alt=“” />
<p>例如,第2行中的someLetters[1:3],索引从0开始,这里就是取第2个元素到第4个元素。</p>
<p>又需要遵循“左闭右开”原则,则取第2个到第3个元素,输出[‘b’, ‘c’]。 </p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-14.png” alt=“” />
<p><strong>代码小结</strong>
当我们想要使用切片的时候,我们可以使用这样的格式</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-15.png” alt=“” />
<p>切片时,开始位置和结束位置的数字,还有三种填写情况。</p>
<ol>
<li>
<p>只填写结束位置的数字;</p>
</li>
<li>
<p>只填写开始位置的数字;</p>
</li>
<li>
<p>两侧数字都不填写。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-16.png” alt=“” />
</li>
<li>
<p>开始位置数字不填,默认从第一个元素开始切片。根据“左闭右开”原则,如图,从第一个元素(含)开始,取到第三个元素(含)。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-17.png” alt=“” />
</li>
<li>
<p>结束位置数字不填,默认从开始位置切片,取到最后一个元素。</p>
</li>
</ol>
<p>注意:不填写结束位置的数字时,列表中最后一个元素也会被提取。如图,表示从第二个元素(含)开始,到最后一个元素(含)结束。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-18.png” alt=“” />
<ol start=“3”>
<li>开始位置和结束位置都不填写时,就是取列表中的所有元素。如图,[:]直接取出所有元素,但这种用法不常见,了解即可。
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-19.png” alt=“” /></li>
</ol>
<p>学习了列表的切片方法后,元组也可以使用切片来截取一段数据,如图所示。 </p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-20.png” alt=“” />
<p>学习了索引和切片访问列表中数据的方式后,如果,某个列表中的数据定义错误了,想要进行修改,该怎样操作呢?</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-21.png” alt=“” />
<h3>列表的修改 </h3>
<pre class=“language-python line-numbers”><code class=“language-python”>
friendName = [“Kevin”, “Tony”, “Asum”]
print(friendName)
print(friendName[0])
friendName[0] = “Jessica”
print(friendName)
output
[‘Kevin’, ‘Tony’, ‘Asum’]
Kevin
[‘Jessica’, ‘Tony’, ‘Asum’]
</code></pre>
<p>代码的作用
这5行代码定义了一个叫做“friendName”的列表,并输出了不同的结果。</p>
<p>第1行给列表<code>friendName</code>赋值了三个数据:<code>Kevin,Tony,Asum</code>。
第2行输出整个列表。
第3行输出列表中的第一个数据,也就是字符串"Kevin"。
第4行通过代码<code>friendName[0]</code>修改了列表的第一个数据,给它赋值字符串<code>"Jessica"</code>。
第5行输出了列表<code>friendName</code>。</p>
<p><strong>friendName</strong>
变量名,用来存储这个列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-22.png” alt=“” />
<p><strong> [ ]</strong>
一对中括号,用来表示一个列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-23.png” alt=“” />
<p><strong> [0]</strong>
中括号加数字,作为索引,用来定位列表中的某个数据。
本例中,索引0表示第一个数据。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-24.png” alt=“” />
<p><strong>Jessica</strong>
一个字符串,重新给friendName这个列表中的第一个数据赋值。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-25.png” alt=“” />
<p><strong>代码小结</strong>
当我们要对列表中的数据进行修改时,可以使用图中格式</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-26.png” alt=“” />
<p>列表和元组有很多相似点,但<strong>列表的修改</strong>不能应用于元组中,<strong>元组具有不可变</strong>的特性。
元组的内容定义完成后,里面的内容就<strong>不能修改</strong>。</p>
<p>由于,元组是不可修改的,强行修改会出现以下 bug:
类型错误:
当对元组进行修改时,就会提示元组类型数据更改<code>(TypeError: ‘tuple’ object does not support item assignment)</code>。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-27.png” alt=“” />
<p>了解以上知识点后,我们需要对元组和列表进行区分:</p>
<p><strong>相同点:</strong></p>
<ol>
<li>可以使用索引定位到某个元素;</li>
<li>可以使用切片取一个片段;</li>
<li>可以存储不同的数据,如,字符串、整型、浮点型、布尔数等。 </li>
</ol>
<p><strong>不同点:</strong>元组内容是不可修改的。</p>
<p>例如:程序员在编写程序时,也会犯错,因此像元组这样不可变的数据结构可以有效防止写代码的人因为自己的错误,误修改了里面的数据。 </p>
<h2>列表的便捷操作</h2>
<p>学习如何在列表中追加元素、插入元素和删除元素。</p>
<h3>列表的追加</h3>
<p>追加(Append):追加一般用于描述在列表的末尾添加元素的行为。</p>
<p>Python 提供了给列表追加元素的功能。
当我们想在列表的尾部追加一个元素的时候,可以在列表名后使用 <code>append() </code>语句。</p>
<pre class=“language-python line-numbers”><code class=“language-python”>
friendName = [“Max”, “Jeremy”, “Christina”]
friendName.append(“Vane”)
print(friendName)
</code></pre>
<p>代码的作用
这三行代码定义了一个名为 friendName 的列表,并给这个列表追加了一个元素,最后输出了这个列表。 </p>
<p><strong>列表名</strong>
friendName 是一个列表名,用来表示先前定义的列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-29.png” alt=“” />
<p><strong>句点</strong>
一个句点,表明将会使用列表的某个内置功能。
这是一个固定的搭配格式,只能使用英文句号,不能替换成其他符号。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-30.png” alt=“” />
<p><strong>append</strong>
<code>append</code>,类似<code>print</code>,表明我们要在这个列表的尾部添加新的元素。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-31.png” alt=“” />
<p><strong>( )</strong>
一对英文括号,这是 append 功能的固定格式。括号内是具体要添加到列表末尾的元素。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-32.png” alt=“” />
<p><strong>追加元素</strong>
在列表 friendName 中追加一个元素,<strong>使用 append() 一次只能追加一个元素。</strong></p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-33.png” alt=“” />
<p>使用 <code>append() </code>可以追加不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。
在第 4 行代码中,虽然追加的是列表,但是也看作一个元素</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-34.png” alt=“” />
<p><strong>代码小结</strong>
当在列表尾部追加一个数据时,使用如下格式:</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-35.png” alt=“” />
<h3>列表的插入</h3>
<p>在 Python 中,可以使用 insert() 语句来执行插入元素的操作。</p>
<pre class=“language-python line-numbers”><code class=“language-python”>
rank = [“Max”, “Jeremy”, “Christina”]
rank.insert(1,“May”)
print(rank)
</code></pre>
<p>代码的作用
在这段代码中,定义了一个名为 rank 的列表,在这个列表中间插入了一个字符串"May",并在最后输出了这个列表。</p>
<p><strong>列表名</strong>
rank 是一个列表名,用来表示先前定义的列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-36.png” alt=“” />
<p><strong>句点</strong>
句点,表明将会使用列表的某个内置功能。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-37.png” alt=“” />
<p><strong>insert</strong>
insert,类似print。表明我们要在这个列表的某个位置插入新的元素。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-38.png” alt=“” />
<p><strong>( )</strong>
一对括号,这是insert功能的固定格式。括号内是插入的元素位置以及要插入的元素。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-39.png” alt=“” />
<p><strong>两项内容</strong>
我们需要在 <code>insert() </code>的括号中填入两项内容:
第一项是元素插入的位置;
第二项是插入的具体数据。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-40.png” alt=“” />
<p><strong>索引</strong>
第一个数字位置表示索引,也就是这个元素要插入到列表中的位置。
索引是从 0 开始。
本例中索引 1 表示插入到第二的位置。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-41.png” alt=“” />
<p><strong>逗号</strong>
一个逗号,用来分隔插入的位置以及插入的具体数据。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-42.png” alt=“” />
<p><strong>插入元素</strong>
插入的元素可以是不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。
在本例中,我们向列表中插入一个字符串"May"。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-43.png” alt=“” />
<p>插入元素以后,排在此元素之后的原有元素自动后移一位。
在本例中,"May"插入到列表rank中的第二项中,原有的"Jeremy"和"Christina"就自动后移一位。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-44.png” alt=“” />
<p><strong>代码小结</strong>
当在列表中插入一个数据时,使用如下格式:</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-45.png” alt=“” />
<h3>列表删除元素 </h3>
<p>学习的两个列表内置语句:<code>append() </code>和 <code>insert()</code>,这两个语句都可以往列表中添加新元素。
如果列表中存在不需要的元素,想要删除它,可以使用 <code>pop()</code>,删除列表中的元素。</p>
<pre class=“language-python line-numbers”><code class=“language-python”>
primeNumber = [1, 3, 5, 7, 9, 10]
primeNumber.pop()
print(primeNumber)
</code></pre>
<p>代码的作用
这段代码定义了一个名为 primeNumber的列表,并且删除了这个列表中最末尾的一个元素,最后输出了这个列表。</p>
<p><strong>列表名</strong>
primeNumber 是一个列表名,用来表示先前定义的列表。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-46.png” alt=“” />
<p><strong>句点</strong>
一个句点,表明将会使用列表的某个内置功能。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-47.png” alt=“” />
<p><strong>pop( )</strong>
<code>pop()</code>,作用是删除列表中指定索引处的元素。
括号内的数字表示要删除数据的索引,不填写数字则表示默认删除列表中的<strong>最后一个数据</strong>。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-48.png” alt=“” />
<p><code>pop() </code>括号内的数字表示要删除数据的索引,在本例中索引值为1,就删除了列表primeNumber中的第二项元素。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-49.png” alt=“” />
<p><strong>代码小结</strong>
当我们需要从列表中删除一个数据,使用如下格式:</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-50.png” alt=“” />
<p><strong>pop() </strong>在删除列表指定的元素后,可以赋值给变量存储下来。
本例中,删除的是列表primeNumber中最后一项元素 10,将整型 10 赋值给变量lastData,接着通过print()输出变量lastData。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-51.png” alt=“” />
<p>我们前面的例子在定义一个列表时,都是使用的常量来作为列表中的元素。
变量也同样可以作为定义列表的元素,并且列表的各种操作也同样适用于变量数据。
图例中展示了变量作为列表元素时,代码的使用方式。</p>
<img src=“https://assets.moshanghua.net/images/2022/06/msh-2522-52.png” alt=“” />
