4.3 列表函数
Python中还提供了许多函数用来增强列表的功能,如表4-1所示。
表4-1 列表函数
表4-1中的函数有些比较常见,有些用于排序操作(加粗标识的部分)。下面介绍常见函数和排序函数。
4.3.1 常见函数
下面通过代码清单4-10介绍列表中常见函数的使用。
代码清单4-10:列表中常见函数的使用
上述代码中的注释说明了各个函数的作用,供读者参考。这里需要注意的是,代码①处使用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:简单列表的排序
运行上述代码得到的输出结果如下:
显然都是我们所期待的结果。不过有时候列表并不是那么简单,它可能相对复杂,但是存在一定的规则,如坐标(x, y)。有时候需要依据坐标的x值从大到小进行排序,或者依据坐标的y值从小到大进行排序,下面通过代码清单4-12进行说明。
代码清单4-12:排序坐标
代码①处和代码③处定义了两个函数,它们分别返回坐标的x值和y值。代码②处的sort函数有两个参数,参数key设置为x_value函数,该函数会返回坐标的x值,因此sort函数就会根据x值进行排序,参数reverse设置为True,以x值从大到小进行排序。代码④处的sort函数有两个参数,参数key设置为y_value函数,但不设置参数reverse的值,所以它的默认值就是False,依据y值从小到大进行排序。运行上述代码得到的输出结果如下:
sorted是Python的内置函数,它存在以下3个参数。
• iterable:可迭代对象,如列表。
• key:比较的依据,对于复杂元素可自定义比较的依据。
• reverse:布尔值,默认值为False,如果为False则从小到大排序,如果为True则从大到小排序。
下面通过代码清单4-13介绍内置函数sorted的使用方法。
代码清单4-13:内置函数sorted的使用方法
上述代码中的sorted函数和listing.sort函数比较接近,只是sorted函数是将原列表进行排序,然后将其存放到新的列表中,最后返回新的列表,而并不对列表本身元素的顺序进行修改,所以在代码①处打印的两个列表的顺序会有所不同。这段代码最后还会通过id函数输出两个列表的内存地址。运行上述代码得到的输出结果如下:
注意 使用列表的函数,一定要分清哪些方法会改变原列表,哪些方法是不修改原列表的。
在上述关于修改列表的函数中,函数copy和Python的内置函数sorted对原列表没有影响。它们都会创建新的列表,然后存放对应的元素。如果不希望修改原列表,而又需要频繁地对列表进行操作,则可以使用列表的copy函数。
运行上述代码得到的输出结果如下:
由此可见,对列表进行复制并不会影响原列表,这样就能在不修改原列表的情况下,复制、操作和分析列表。