![Python+Excel办公自动化一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/221/40795221/b_40795221.jpg)
4.2 访问和操作列表
本节主要介绍如何访问和操作列表,增、删、查、改和截取都是很常见的操作。
4.2.1 元素的增、删、查、改
增、删、查、改是列表最基本的操作,下面通过代码清单4-5进行说明。
代码清单4-5:列表的增、删、查、改
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/083-3.jpg?sign=1739303930-n6cwWlHorpAbqaxoe3im225piKfkf0dK-0-877d045eb91c07b2018db94152dbbdee)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/084-1.jpg?sign=1739303930-Icrt5xhRx2RWfGwKa2SpxIYwku3OU0e3-0-be5c89006c2f392399fe234d68f1f30f)
上述代码的功能包括以下几点。
• 代码①处修改第五个元素的值。
• 代码②处删除列表中的一个元素,对于正向下标,后续的元素的下标都会减1。
• 代码③处在列表尾部添加元素。
• 代码④处将元素插入指定的下标之内,对于正向下标,后续的元素的下标都会加1。
• 代码⑤处根据值找到其在列表中的位置,只是index函数需要注意的是,如果找不到对应的元素,那么它将会发生异常,所以为了避免这些异常,可以事先通过if语句判定元素是否在列表之内。
• 代码⑥处删除列表,和代码②处不同的是,它是删除整个列表的定义,而代码②处通过下标删除列表中的某个元素,在代码⑥处之后,将无法在后续代码中使用列表lst。
4.2.2 截取子列表
和字符串数据类型一样,列表也能截取子列表。截取子列表的方法和截取子串的方法比较接近,下面通过代码清单4-6介绍截取子列表的方法。
代码清单4-6:截取子列表
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/084-2.jpg?sign=1739303930-ntrbpRWS6l77EyStLfmBSAoZYhHUEWTz-0-b0a16eb31e7db4130448eb28430c3eee)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-1.jpg?sign=1739303930-uGks7vhId9drEB0OSiwA5BChq6aflL9D-0-ed49d5475b5fb3e36dd9246ee567666c)
只要掌握好列表的下标,再参考字符串的子串的截取,理解上述代码就比较容易。
4.2.3 列表的嵌套
所谓列表的嵌套,就是列表中所包含的元素也带有列表,如下所示:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-2.jpg?sign=1739303930-0tETZK65GoK5wuTaNzLd3EI8n07ZBMWm-0-add12123f171f24e1056ccfbf15e0e0c)
列表arr中所有的元素都是列表,列表arr2中的元素既有列表也有数字。把列表元素中含有列表的列表称为嵌套列表。
下面通过代码清单4-7来说明如何访问嵌套列表元素和遍历嵌套列表。
代码清单4-7:访问嵌套列表元素和遍历嵌套列表
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-3.jpg?sign=1739303930-EStJm9uIPSglWZwNGm09teTzgSm20CSX-0-e0d7c27437cd8cbd66ec49b74a891c81)
对于包含两重嵌套的列表来说,可以使用类似于arr[1]的方式来访问元素,返回的是1个元素,当然它也是一个列表,而arr[2][1]访问的是列表arr的第三个元素中的第二个元素。包含两重嵌套的列表可以使用两个for循环进行遍历,整体还是比较简单的。运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/086-1.jpg?sign=1739303930-pz2Q7X25SfQ7alahhO5VOe0s7Bx7nWpe-0-6f6a9c3b166c1368affa8efdd22e0301)
代码清单4-7中的列表arr的所有元素都是列表,但是也存在列表中的元素有些是数字,有些是列表,而有些是字符串的可能,此时应当如何遍历列表呢?使用2.2节提到的type函数可以返回数据的类型,所以可以使用该函数来辨别元素的数据类型,从而根据不同的情况进行处理。下面通过代码清单4-8进行说明。
代码清单4-8:遍历复杂数据类型的嵌套列表
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/086-2.jpg?sign=1739303930-w87QMUrp0aCmKS8KALi3kvwgZQBAMp9w-0-c752b641802cc14f9ee7ad88ff4ef194)
上述代码中的arr是一个具有复杂数据类型的列表,此时遍历该列表就需要根据其元素数据类型进行处理。在代码①处使用type函数来判断元素的类型,如果是列表则用嵌套循环进行下一步的访问,如果不是列表则直接读取元素值,这样就能遍历列表。
4.2.4 列表的其他操作
在Python中还可以对列表进行其他的操作,包括组合列表(+)、判断是否是列表元素(in)、重复列表(*)和迭代(iter函数)等,下面通过代码清单4-9进行说明。
代码清单4-9:列表的其他操作
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/087-1.jpg?sign=1739303930-scLxersXoa7ObGxUVDZC5kqnoncM1oRu-0-d89a8167662b654625bffb6df49904ad)
上述代码的功能主要包括以下几点。
• 代码①处:使用运算符“*”使列表重复3次。
• 代码②处:使用运算符“+”使列表list2添加到列表list1的尾部。
• 代码③处:通过iter函数获取列表list1的迭代器(it),第一次调用it的next函数就返回列表list1的第一个元素,第二次调用it的next函数就返回列表list1的第二个元素,以此类推。
• 代码④处:通过迭代器进行循环,访问列表list2。
• 代码⑤处:通过in运算符判断列表中是否存在对应的元素。
运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/087-2.jpg?sign=1739303930-3nLsk6yiVJ3F6k4wC2RVfKnV5VLd0R8H-0-754ee8a727378bbfb9e93186047b50a1)