![Python+Excel办公自动化一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/221/40795221/b_40795221.jpg)
4.3 列表函数
Python中还提供了许多函数用来增强列表的功能,如表4-1所示。
表4-1 列表函数
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/088-2.jpg?sign=1739305656-nS5yNVFkoubpDey1RsugmR1hyeQKRksE-0-04d674ffbd56069a72240dfa44f7a267)
表4-1中的函数有些比较常见,有些用于排序操作(加粗标识的部分)。下面介绍常见函数和排序函数。
4.3.1 常见函数
下面通过代码清单4-10介绍列表中常见函数的使用。
代码清单4-10:列表中常见函数的使用
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/088-3.jpg?sign=1739305656-vBUN8pIHnpA3cfpF8khc9x053ZckVX22-0-017364d0890020de3198158c2a99147e)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/089-1.jpg?sign=1739305656-MNLvHCD16X6l3C11NsFuJ8QhpOnxY4N1-0-367e04d0b6959ff9ed07aab383108baf)
上述代码中的注释说明了各个函数的作用,供读者参考。这里需要注意的是,代码①处使用id函数输出两个列表的内存地址,如果运行上述代码就会发现这两个列表的元素是相同的,但内存地址是不同的,也就是说,列表integers2是通过复制列表integers得到的,但是指向的内存地址并不相同。
4.3.2 排序函数
表4-1中的排序函数有sorted、reverse和sort。
• sorted是Python的内置函数,它会将当前列表排序,然后存放到新的列表中,最后返回新的列表,但是它并不修改原列表。
• reverse函数比较简单,就是将列表反转过来,最后一个元素变为第一个元素,倒数第二个元素变为第二个元素,以此类推。
• sort函数相对比较复杂,它存在两个参数,一个是key,另一个是布尔值reverse。参数key允许在复杂的情况下指定元素排序的依据,默认值为None;参数reverse设置为False(默认值也是False)时从小到大进行排序,设置为True时从大到小进行排序。
下面通过代码清单4-11来介绍简单列表的排序。
代码清单4-11:简单列表的排序
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/090-1.jpg?sign=1739305656-RagNxALqgpphpU43Pzn6KF5mxi74p8Of-0-4c93711ac377b9541876c840034eec16)
运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/090-2.jpg?sign=1739305656-DqNRqwLxaFiZYKbYw4eQ705tU5TK4E3U-0-823487f6bdcd632b9ef331c9e4c4317e)
显然都是我们所期待的结果。不过有时候列表并不是那么简单,它可能相对复杂,但是存在一定的规则,如坐标(x, y)。有时候需要依据坐标的x值从大到小进行排序,或者依据坐标的y值从小到大进行排序,下面通过代码清单4-12进行说明。
代码清单4-12:排序坐标
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/090-3.jpg?sign=1739305656-EfYNKlpV29UwLjlBHEckzl3z5BykB4gc-0-297f19ed384d10c55cf1b64fe56f6a76)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/091-1.jpg?sign=1739305656-cYKllDDBZL8J5dmBijCEkp9K8faenCsu-0-f14fda01c514f88e284c811e40181102)
代码①处和代码③处定义了两个函数,它们分别返回坐标的x值和y值。代码②处的sort函数有两个参数,参数key设置为x_value函数,该函数会返回坐标的x值,因此sort函数就会根据x值进行排序,参数reverse设置为True,以x值从大到小进行排序。代码④处的sort函数有两个参数,参数key设置为y_value函数,但不设置参数reverse的值,所以它的默认值就是False,依据y值从小到大进行排序。运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/091-2.jpg?sign=1739305656-oYZZLT2a7GMRdVpxQwlYmsaScDaxiqxa-0-1a4099524828a901948bbc340f0edc38)
sorted是Python的内置函数,它存在以下3个参数。
• iterable:可迭代对象,如列表。
• key:比较的依据,对于复杂元素可自定义比较的依据。
• reverse:布尔值,默认值为False,如果为False则从小到大排序,如果为True则从大到小排序。
下面通过代码清单4-13介绍内置函数sorted的使用方法。
代码清单4-13:内置函数sorted的使用方法
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/091-3.jpg?sign=1739305656-UjJkuXr8dEvAS5R3lAge7IJ5S6bRdxkE-0-022b07a7f1bba4679231cfd004a798c2)
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/092-1.jpg?sign=1739305656-Lj288d1uD4XIHxdchH5h4p0OlzZeuwO8-0-2eb6294d8551e3bcffe81d91483ca6ba)
上述代码中的sorted函数和listing.sort函数比较接近,只是sorted函数是将原列表进行排序,然后将其存放到新的列表中,最后返回新的列表,而并不对列表本身元素的顺序进行修改,所以在代码①处打印的两个列表的顺序会有所不同。这段代码最后还会通过id函数输出两个列表的内存地址。运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/092-2.jpg?sign=1739305656-R89qSO3f0RO11MzcD2IEWTmX9KE4q5g3-0-86e74b4fcce6feabce2eb681786c89a7)
注意 使用列表的函数,一定要分清哪些方法会改变原列表,哪些方法是不修改原列表的。
在上述关于修改列表的函数中,函数copy和Python的内置函数sorted对原列表没有影响。它们都会创建新的列表,然后存放对应的元素。如果不希望修改原列表,而又需要频繁地对列表进行操作,则可以使用列表的copy函数。
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/092-3.jpg?sign=1739305656-sqw57YMhZxcbNXaXmRFFZ7LO5MlgViBf-0-9bb1a6a0f2b6a61231b2e3e5ca14d60d)
运行上述代码得到的输出结果如下:
![](https://epubservercos.yuewen.com/569A18/21190709001167706/epubprivate/OEBPS/Images/092-4.jpg?sign=1739305656-Pn52XoDxBAlaJCLJRk8VDwJAuBIqvaFC-0-8f8e751599551a915091f47ddaee3836)
由此可见,对列表进行复制并不会影响原列表,这样就能在不修改原列表的情况下,复制、操作和分析列表。