方法和函数是一回事,只是它是调用在一个值上。每种数据类型都有它自己的一组方法。例如,列表数据类型有一些有用的方法,用来查找、添加、删除或操作列表中的值。
方法 append
用于将一个对象附加到列表末尾。
lst = [1, 2, 3]
lst.append(4)
lst
[1, 2, 3, 4]
方法 clear
就地清空列表的内容。
lst = [1, 2, 3]
lst.clear()
lst
[]
方法 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]
方法 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
方法 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]
列表值有一个 index()
方法,可以传入一个值,
如果该值存在于列表中,就返回它的下标。方法 index
在列表中查找指定值第一次出现的索引。
如果该值不在列表中,Python 就报 ValueError
。在交互式环境中输入以下代码:
spam = ['hello', 'hi', 'howdy', 'heyas']
spam.index('hello')
0
spam.index( 'heyas')
3
方法 insert
用于将一个对象插入列表。
numbers = [1, 2, 3, 5, 6, 7]
numbers.insert(3, 'four')
numbers
[1, 2, 3, 'four', 5, 6, 7]
方法 pop
从列表中删除一个元素(末尾为最后一个元素),并返回这一元素。
x = [1, 2, 3]
x.pop()
3
x
[1, 2]
x.pop(0)
1
x
[2]
注意:pop
是唯一既修改列表又返回一个非 None
值的列表方法。
使用 pop
可实现一种常见的数据结构-栈(stack)。栈就像一叠盘子,
可在上面添加盘子, 还可从上面取走盘子。最后加入的盘子最先取走,
这被为后进先出(LIFO)。
方法 remove
用于删除第一个为指定值的元素。
x = ['to', 'be', 'or', 'not', 'to', 'be']
x.remove('be')
x
['to', 'or', 'not', 'to', 'be']
方法 reverse
按相反的顺序排列列表中的元素。
x = [1, 2, 3]
x.reverse()
x
[3, 2, 1]
方法 sort
用于对列表就地排序。就地排序意味着对原来的列表进行修改,
使其元素按顺序排列,而不是返回排序后的列表的副本。
x = [4, 6, 2, 1, 7, 9]
x.sort()
x
[1, 2, 4, 6, 7, 9]
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()
方法将列表中所有的表项当成小写,
但实际上并不会改变它们在列表中的值。
方法 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]