![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=1739605429-2xKw1K62rHfvRzVhJBkmjgBG46V3pyyf-0-a7b74b13a8dc44ad0ebae94e04731a20)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/084-1.jpg?sign=1739605429-p7GY4J9uwEHKGEExTlhpNns4gFGcAXAu-0-9234706d67333bf8c583f0d98597e4e7)
上述代码的功能包括以下几点。
• 代码①处修改第五个元素的值。
• 代码②处删除列表中的一个元素,对于正向下标,后续的元素的下标都会减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=1739605429-G5DoY5YnuvjvQpCLF1k1RMz98cw5ZHHo-0-0cee125aa762d282983f0d078d5738ea)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-1.jpg?sign=1739605429-XcnawnL27k0RNbsSflOuLJlji3RJ9Nk1-0-7216809819ccfd40f5ba513381dfa206)
只要掌握好列表的下标,再参考字符串的子串的截取,理解上述代码就比较容易。
4.2.3 列表的嵌套
所谓列表的嵌套,就是列表中所包含的元素也带有列表,如下所示:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-2.jpg?sign=1739605429-v1au1l9CnrcRZBNwKdTnuEIFKmt7VDAh-0-50b130177ae9fcf4c56b2e635c61dc1a)
列表arr中所有的元素都是列表,列表arr2中的元素既有列表也有数字。把列表元素中含有列表的列表称为嵌套列表。
下面通过代码清单4-7来说明如何访问嵌套列表元素和遍历嵌套列表。
代码清单4-7:访问嵌套列表元素和遍历嵌套列表
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/085-3.jpg?sign=1739605429-R9vG4JdPPXddQ1yw18qZng11gDlj4zt0-0-cc2c062dadf63d36f62e09c2fe7953ca)
对于包含两重嵌套的列表来说,可以使用类似于arr[1]的方式来访问元素,返回的是1个元素,当然它也是一个列表,而arr[2][1]访问的是列表arr的第三个元素中的第二个元素。包含两重嵌套的列表可以使用两个for循环进行遍历,整体还是比较简单的。运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/086-1.jpg?sign=1739605429-t2LPDSqm79rWG7EY2zGlGYxSUQbaoMfb-0-7d7e405cfe160ca2c85167d302ec224b)
代码清单4-7中的列表arr的所有元素都是列表,但是也存在列表中的元素有些是数字,有些是列表,而有些是字符串的可能,此时应当如何遍历列表呢?使用2.2节提到的type函数可以返回数据的类型,所以可以使用该函数来辨别元素的数据类型,从而根据不同的情况进行处理。下面通过代码清单4-8进行说明。
代码清单4-8:遍历复杂数据类型的嵌套列表
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/086-2.jpg?sign=1739605429-aS50VmihwkdwIwkABHNmHaRMzpAfuXDF-0-b99c7a7463c5d14c17f12eee6e135661)
上述代码中的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=1739605429-2VvELjcwaZVgm4s0jFo3Z2rvThKRNBn3-0-a51b8e7b5f374abb4631e7ed94d6866c)
上述代码的功能主要包括以下几点。
• 代码①处:使用运算符“*”使列表重复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=1739605429-PVv8MTxluSKdjy4iJGChEDymvSSTdMFr-0-f3251c868d4ad0bc9ec10d739dd90c7b)