python列表方法

来源:互联网 发布:知世为什么鼓励小狼 编辑:程序博客网 时间:2024/06/15 18:56

1.append()

append()方法用于在列表末尾追加新的对象:

x = [1,2,3]x.append(4)print x

输出:

[1, 2, 3, 4]

append方法和其他一类方法类似,只是在恰当的位置修改原来的列表。这意味着,它不是简单的返回一个修改过的新列表。一般来说这正是你想要的,但在某些情况下,这样也会带来其他的麻烦。后面讲sort方法时,我会再次讨论这个问题的。

2.count()

count方法统计某个元素在列表中出现的次数:

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

3.extend()

extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:

x = [1,2,3]y = [4,5,6]x.extend(y)print x

输出:

[1, 2, 3, 4, 5, 6]

这个操作看起来很像连接操作,两者最主要的区别在于:extend方法修改了被扩展的序列(在这个例子中,就是x).而原始的连接操作则不然,它会返回一个全新的列表:

x = [1,2,3]y = [4,5,6]print x+yprint x

输出:

[1, 2, 3, 4, 5, 6][1, 2, 3]

你可以看到被连接的列表与之前例子中被扩展的列表是一样的,但是这次它并没有被修改。这是因为原始的连接操作创建了一个包含了x和y副本的新列表。如果需要如下例所示的操作,那么连接操作的效率会比extend方法低。

x = x+y

同样,这里也不是一个原位置操作,它并不会修改原来的列表。我们可以使用分片赋值来实现心疼的结果:

x = [1,2,3]y = [4,5,6]x[len(x):]=yprint x

输出:

[1, 2, 3, 4, 5, 6, 4, 5, 6]

虽然这么做可行,但是可读性就没有extend好了。

4.index()

index方法用于从列表中找出某个值第一个匹配项的索引位置:

knight = ['we','are','the','python','who','say']a = knight.index('who')print a

输出:

4

当搜索但是who的时候,就会发现它在索引号为4的位置:

print knight[4]

输出:

who

5.insert()

insert方法用于将对象插入到列表中:

number = [1,2,3,4,5]number.insert(3,'four')print number

输出:

[1, 2, 3, 'four', 4, 5]

与extend方法一样,insert方法的操作也可以用分片赋值来实现。

number = [1,2,3,4,5]number[3:3]=['four']print number

输出:

[1, 2, 3, 'four', 4, 5]

6.pop()

pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:

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

输出:

3[1, 2]1[2]

:pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法。

7.remove()

remove方法用于移除列表中某个值的第一个匹配项:

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

输出:

['to', 'or', 'not', 'to', 'be']

可以看到:只有第一次出现的值被移除了,而不存在于列表中的值是不会移除的。
但值得注意的是,remove是一个没有返回值的原位置改变的方法。它修改了列表却没有返回值,这与pop方法相反。

8.reverse()

reverse方法将列表中的元素反向存放。

y = [1,2,3]y.reverse()print y

输出:

[3, 2, 1]

注意:该方法也改变了列表但不返回值(就像remove和sort)

9.sort()

sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原来的列表,从而让其重点额元素能按照一定的顺序排列,而不是简单地返回一个已排序的列表副本。

a = [4,3,5,6,78,1]a.sort()print a

输出:

[1, 3, 4, 5, 6, 78]

前面介绍了结果改变列表却不返回值的方法,在大多数情况下这样的行为方式是很合常理的(如append方法)。但是,sort方法的这种行为方式需要重点讲解一下,因为很多人都被sort方法弄糊涂了。当用户需要一个排好序的列表副本,同时又保留原有列表不变的时候,问题就出现了。为了实现这个功能,我们自然而然就想到了如下做法(实际是错误的):

a = [4,3,5,6,78,1]b = a.sort()print b

输出:

None

因为sort方法修改了a却返回了空值,那么最后得到的是已排序的a以及值为None的b。实现这个功能的正确方法是,首先把a的副本赋值给b,然后对y进行排序,如下例所示:

a = [4,3,5,6,78,1]b = a[:]b.sort()print aprint b

输出:

[4, 3, 5, 6, 78, 1][1, 3, 4, 5, 6, 78]

再次调用a[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法,只是简单地把a赋值给b是没用的,因为这样做就让a和b都指向同一个列表了。

a = [4,3,5,6,78,1]b = ab.sort()print aprint b

输出:

[1, 3, 4, 5, 6, 78][1, 3, 4, 5, 6, 78]

另一种获取已排序的列表副本的方法是,使用sorted函数:

a = [4,3,5,6,78,1]b = sorted(a)print aprint b

输出:

[4, 3, 5, 6, 78, 1][1, 3, 4, 5, 6, 78]

这个函数实际上可以用任何序列,却总是返回一个列表:

>>> sorted('python')['h', 'n', 'o', 'p', 't', 'y']>>>

如果想把一些元素按相反的顺序排列,可以先使用sort(或sorted),然后再调用reverse方法,或者也可以使用reverse参数。