前言
方法是与对象(列表、数、字符串等)联系紧密的函数,调用方式为 object.method(arg),方法调用和函数调用很像。这里主要列举列表中常用的几个方法。
1.append
append 用于将一个对象附加到列表末尾。
需要注意的是,append 只是修改原列表,不会返回修改过后的新列表。
>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
2.clear
clear 用于清空列表的内容。
>>> a = [1,2,3,4]
>>> a.clear()
>>> a
[]
这类似于切片中赋值语句a[:] = []
3.copy
copy 用于复制列表。
常规的复制只是将一个名称关联到另一个列表,如下:
>>> a = [1,2,3]
>>> b = a
>>> b[1] = 5
>>> a
[1, 5, 3]
这里修改了 b 列表的值,a 列表也跟着变了,这种复制方式只是相当于给同一个列表重新命名而已,如果要让a 和 b 指向不同的列表,就需要将 b 关联到 a 的副本。如下:
>>> a = [1,2,3]
>>> b = a.copy()
>>> b[1] = 6
>>> a
[1, 2, 3]
这类似于使用 a[:]或者 list(a),这两个也是复制 a
4.count
count 用于计算指定的元素在列表中出现的次数。
如下示例:
>>> a = [1,1,2,3,4,4,4,5]
>>> a.count(4)
3
5.extend
extend能够将多个值附加到列表末尾,如下示例:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
这个方法类似于拼接,注意这里没有返回值,并且 extend 会直接修改被扩展的序列,比如这里的 a,这和常规的拼接(直接用“+”号连接起来)有点不同, 常规拼接是返回一个新的列表,而原有列表并没有变化,如下示例:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]
所以 extend 方法和常规拼接有不同之处。如果直接将常规拼接赋值给a,如下:
a = a + b
这样拼接的效率会比 extend 低。
还可以通过切片赋值的方式来实现同样的效果,如下:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[len(a):] = b
>>> a
[1, 2, 3, 4, 5, 6]
虽然效果是一样的,但是这样写的代码可读性会比较差。
6.index
index 的作用是在列表中查找指定值第一次出现的索引:
>>> a = [1,1,2,3,4,3]
>>> a.index(3)
3
注意,这里一定是只返回查找值第一次出现的索引,顺序从左到右。如果列表中不存在该值,将会引发异常。
7. insert
insert 方法是用于将一个对象插入列表中。
>>> a = [1,2,3,4]
>>> a.insert(1,7)
>>> a
[1, 7, 2, 3, 4]
8.pop
方法 pop 是从列表中删除列表中最后一个元素,并将其返回。
>>> a = [1,2,3,4]
>>> a.pop()
4
>>> a.pop()
3
>>> a
[1, 2]
pop 是唯一既可以修改列表又返回一个非 None 值的列表方法
9.remove
方法 remove 用于删除第一个为指定值的元素。
>>> a = [1,2,3,4,5,2,3,2]
>>> a.remove(2)
>>> a
[1, 3, 4, 5, 2, 3, 2]
注意,这里只删除第一个指定值,从左到右顺序。remove 是就地修改但不返回值的方法之一。
10.reverse
reverse 按相反的顺序排列列表中的元素。
>>> a = [1,2,3,4]
>>> a.reverse()
>>> a
[4, 3, 2, 1]
注意,reverse 也是就地修改列表,但是不返回任何值。
11.sort
sort 用于对列表就地排序。就地排序就是说对原来的列表进行修改,使其元素按顺序排列,而不是返回排序后的列表的副本。
>>> a = [4,5,6,1,2]
>>> a.sort()
>>> a
[1, 2, 4, 5, 6]
如果仅仅需要排序后的列表副本 并且要保留原有的列表不变时,可以先将原有列表复制一份,然后再进行排序,如下:
>>> a = [4,5,6,1,2]
>>> b = a.copy()
>>> b.sort()
>>> a
[4, 5, 6, 1, 2]
>>> b
[1, 2, 4, 5, 6]
这里不能用简单的赋值,如果赋值那么 a 和b 就指向同一个列表。
为获取排序后列表的副本,另一种方式是使用函数 sorted
>>> a = [4,5,6,1,2]
>>> b = sorted(a)
>>> a
[4, 5, 6, 1, 2]
>>> b
[1, 2, 4, 5, 6]
12.高级排序
方法 sort 有接受两个可选参数 key 和 reverse。这两个参数通常是按名称来指定的,称为关键字参数。key 就是指定需要按照什么属性来进行排序,而 rerverse 是指定是否要按照相反顺序来进行排序。
如下,按照长度来进行排序:
>>> a = ['word','aa','hello','waq']
>>> a.sort(key = len)
>>> a
['aa', 'waq', 'word', 'hello']
>>> a = [3,1,4,5,2]
>>> a.sort(reverse = True)
>>> a
[5, 4, 3, 2, 1]
sorted 也接受key 和 reverse 两个参数,在很多情况下,将参数 key 设置成一个自定义函数将会很有用。