方法是一个与某些对象有紧密联系的函数,对象可能是列表,数字,也可能是字符串或者其他类型的对象。一般来说,方法可以这样进行调用:对象.方法(参数)
列表提供了几个方法,用于检查或者修改其中的内容。
1.append
append方法和其他一些方法类似,只是在恰当位置修改原来的列表。这意味着它不是简单地返回一个修改过的列表——而是直接修改原来的列表。
3.extend
这个操作看起来很像连接操作,两者最主要的区别是:extend方法修改了被扩展的序列。而原始的连接操作会返回一个全新的列表:
如果想让a被改变,可以这样,可是这样的效率比extend低很多:
我们还可以通过分片赋值来实现相同的结果:
4.index
5.insert
与extend方法一样,insert方法的操作也可以用分片赋值来实现。
pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法
可以看到:只有第一次出现的值被移除了,而不存在于列表中的值是不会移除的。
9.sort
再次调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法,只是简单地把x赋值给y是没用的,因为这样做就让x和y都指向同一个列表了。
另一种获取已排序的列表副本的方法是使用sorted函数:
这个函数实际上可以用于任何序列,却总是返回一个列表。sorted函数可以用于任何可迭代的对象
列表提供了几个方法,用于检查或者修改其中的内容。
1.append
append用于在列表末尾追加新的对象:
>>>list=[1,2,3]
>>>list.append(4)
>>>list
[1,2,3,4]
append方法和其他一些方法类似,只是在恰当位置修改原来的列表。这意味着它不是简单地返回一个修改过的列表——而是直接修改原来的列表。
2.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
3.extend
extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a.extend(b)
>>>a
[1,2,3,4,5,6]
这个操作看起来很像连接操作,两者最主要的区别是:extend方法修改了被扩展的序列。而原始的连接操作会返回一个全新的列表:
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a+b
[1,2,3,4,5,6]
>>>a
[1,2,3]
如果想让a被改变,可以这样,可是这样的效率比extend低很多:
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a=a+b
>>>a
[1,2,3,4,5,6]
我们还可以通过分片赋值来实现相同的结果:
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a[len(a):]=b
>>>a
[1,2,3,4,5,6]
4.index
index方法用于从列表中找出某个值第一个匹配项的索引位置:
>>> string=['we','are','the','knights','who','say','ni']
>>> string.index('who')
4
>>> string.index('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'hello' is not in list
>>> string[4]
'who'
5.insert
insert方法用于将对象插入到列表中:
>>> numbers=[1,2,3,5,6,7]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]
与extend方法一样,insert方法的操作也可以用分片赋值来实现。
>>> numbers=[1,2,3,5,6,7]
>>> numbers[3:3]=['four']
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]
它的可读性不如insert方法。
6.pop
pop方法会一出列表中的一个元素(默认是最后一个),并且返回该元素的值
>>> x=[1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]
pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法
7.remove
remove方法用于移除列表中的某个值的第一个匹配项:
>>> x=['to','be','or','not','to','be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']
>>> x.remove('bee')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
可以看到:只有第一次出现的值被移除了,而不存在于列表中的值是不会移除的。
8.reverse
reverse方法将列表中的元素反向存放
>>> x=[1,2,3]
>>> x.reverse()
>>> x
[3, 2, 1]
9.sort
sort方法用于在原位置对列表进行排序,在“原位置排序“意味着改变原来的列表,从而让其他的元素能按一定的顺序排列,而不是简单地返回一个已排序的的列表副本
>>> x=[4,6,2,1,7,9]
>>> x.sort()
>>> x
[1, 2, 4, 6, 7, 9]
前面介绍过了几个改变列表却不返回值的方法,在大多数情况下这样的行为方式是很合常理的(例如append方法)。但是sort方法的这种行为方式需要重点讲解一下,因为很多人都被sort方法弄糊涂了。当用户需要一个排好序的列表副本,同时又保留原有序列不变的时候,问题就出现了,我们会想到这种方法:
>>> x=[4,6,2,1,7,9]
>>> y=x.sort()
>>> print y
File "<stdin>", line 1
print y
^
SyntaxError: Missing parentheses in call to 'print'
因为sort方法修改了x却返回了空值,那么最后得到的是已排序的x以及值为None的y。实现这个功能的正确方法是,首先把x的副本赋值给y,然后对y进行排序:
>>> x=[4,6,2,1,7,9]
>>> y=x[:]
>>> y.sort()
>>> x
[4, 6, 2, 1, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]
再次调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法,只是简单地把x赋值给y是没用的,因为这样做就让x和y都指向同一个列表了。
>>> x=[4,6,2,1,7,9]
>>> y=x
>>> y.sort()
>>> x
[1, 2, 4, 6, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]
另一种获取已排序的列表副本的方法是使用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函数可以用于任何可迭代的对象
>>> sorted('python')
['h', 'n', 'o', 'p', 't', 'y']