>>> from env_helper import info; info()
页面更新时间: 2020-02-29 10:47:43
操作系统/OS: Linux-4.19.0-8-amd64-x86_64-with-debian-10.3 ;Python: 3.7.3

4.5. 列表方法

方法和函数是一回事,只是它是调用在一个值上。每种数据类型都有它自己的一组方法。例如,列表数据类型有一些有用的方法,用来查找、添加、删除或操作列表中的值。

4.5.1. append

方法append用于将一个对象附加到列表末尾。

>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

4.5.2. clear

方法clear就地清空列表的内容。

>>> lst = [1, 2, 3]
>>> lst.clear()
>>> lst
[]

4.5.3. copy

方法 copy 复制列表。前面说过,常规复制只是将另一个名称关联到列表。

>>> a = [1, 2, 3]
>>> b = a
>>> b[1] = 4
>>> a
[1, 4, 3]

要让a和b指向不同的列表,就必须将b关联到a的副本。

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b[1] = 4
>>> a
[1, 2, 3]

4.5.4. count

方法count计算指定的元素在列表中出现了多少次。

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x.count(1)
2
>>> x.count([1, 2])
1

4.5.5. extend

方法extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提供给方法extend。

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

这可能看起来类似于拼接,但存在一个重要差别,那就是将修改被扩展的序列。 在常规拼接中,情况是返回一个全新的序列。

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]

4.5.6. index

列表值有一个 index() 方法,可以传入一个值, 如果该值存在于列表中,就返回它的下标。方法index在列表中查找指定值第一次出现的索引。如果该值不在列表中,Python 就报 ValueError 。在交互式环境中输入以下代码:

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> spam.index('hello')
0
>>> spam.index( 'heyas')
3

4.5.7. insert

方法insert用于将一个对象插入列表。

>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(3, 'four')
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]

4.5.8. pop

方法pop从列表中删除一个元素(末尾为最后一个元素),并返回这一元素。

>>> x = [1, 2, 3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]

注意 pop是唯一既修改列表又返回一个非None值的列表方法。

使用pop可实现一种常见的数据结构——栈(stack)。栈就像一叠盘子,你可在上面添加盘子, 还可从上面取走盘子。最后加入的盘子最先取走,这被为后进先出(LIFO)。

4.5.9. remove

方法remove用于删除第一个为指定值的元素。

>>> x = ['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']

4.5.10. reverse

方法reverse按相反的顺序排列列表中的元素。

>>> x = [1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]

4.5.11. sort

方法sort用于对列表就地排序。就地排序意味着对原来的列表进行修改,使其元素按顺序排列,而不是返回排序后的列表的副本。

>>> x = [4, 6, 2, 1, 7, 9]
>>> x.sort()
>>> x
[1, 2, 4, 6, 7, 9]

4.5.12. sorted

为获取排序后的列表的副本, 另一种方式是使用函数sorted。

>>> x = [4, 6, 2, 1, 7, 9]
>>> y = sorted(x)
>>> x
[4, 6, 2, 1, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]

实际上,这个函数可用于任何序列,但总是返回一个列表。

>>> sorted('Python')
['P', 'h', 'n', 'o', 't', 'y']

也可以指定 reverse 关键字参数为 True, 让 sort() 按逆序排序。在交互式环境中输入以下代码:

>>> spam.sort(reverse=True)
>>> spam
['howdy', 'hi', 'heyas', 'hello']

关于 sort() 方法,你应该注意3件事。

  • sort() 方法当场对列表排序。

  • 不能对既有数字又有字符串值的列表排序,因为 Python 不知道如何比较它们。

  • sort() 方法对字符串排序时,使用“ ASCII 字符顺序”,而不是实际的字典顺序。

如果需要按照普通的字典顺序来排序,就在 sort() 方法调用时, 将关键字参数 key 设置为 str.lower

>>> spam = [ 'a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']

这将导致 sort()方法将列表中所有的表项当成小写, 但实际上并不会改变它们在列表中的值。

4.5.13. 高级排序

方法sort接受两个可选参数:key和reverse。这两个参数通常是按名称指定的,称为关键字。 你可将参数key设置为一个用于排序的函数。 然而,不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个键,再根据这些键对元素进行排序。 因此,要根据长度对元素进行排序,可将参数key设置为函数len。

>>> x = ['aardvark', 'abalone', 'acme', 'add', 'aerate']
>>> x.sort(key=len)
>>> x
['add', 'acme', 'aerate', 'abalone', 'aardvark']

对于另一个关键字参数reverse,只需将其指定为一个真值,以指出是否要按相反的顺序对列表进行排序。

>>> x = [4, 6, 2, 1, 7, 9]
>>> x.sort(reverse=True)
>>> x
[9, 7, 6, 4, 2, 1]