python列表方法

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+y
print 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):]=y
print 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 x
print 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 a
print 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 = a
b.sort()
print a
print 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 a
print 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参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值