Python学习笔记(12)——切片

本章开始将介绍Python简化代码的方法。

本文仅供个人记录和复习,不用于其他用途

简化代码

Python的代码追求简洁,越简单越好。那么,为了写出简短的代码,Python中也有很多技巧来帮助我们实现这一目的。

切片

我们现在有一个list,如果要取它的前三个元素,你会怎么做呢?

1
2
L = ['hyx', 'huyinx', 'miao', 'fantastic']
print [L[0], L[1], L[2]]

然而问题扩展一下,比如取前n个元素,我们这个代码就没用了。所以呢,我们可以使用循环来做:

1
2
3
4
5
6
7
L = ['hyx', 'huyinx', 'miao', 'fantastic']
r = []
n = 3
for i in range(n):
r.append(L[i])
print r

这样一来,我们只需修改n的值,就能够轻松解决问题。不过,频繁使用循环过于繁琐,所以我们可以使用切片(Slice),能够大大简化操作:

1
2
L = ['hyx', 'huyinx', 'miao', 'fantastic']
print L[0:3]

L[0:3]表示索引从0开始,一直到3结束(不包括3)。这个有点类似于C++中的泛型循环for(auto &e : array),不过这个更加方便一点。

而且如果第一个索引为0,还可以省略不写:

1
2
L = ['hyx', 'huyinx', 'miao', 'fantastic']
print L[:3]

当然,我们也可以倒数切片,-1也可以省略:

1
2
3
L = ['hyx', 'huyinx', 'miao', 'fantastic']
print L[-2:-1]
print L[-2:]

切片操作的用法不止这些,比如我们先创建一个数列:

>>> L = range(100)
>>> L
[0, 1, 2, 3, ..., 99]

我们可以快速取出前10个数:

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

取出后10个数:

>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

取出11-20:

>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10个数,每隔两个取一个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

所有数,每十个取一个:

>>> L[::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

如果你只写一个:,那么就相当于复制一个数组。至于tuple也是一样,只不过tuple切片后依旧是tuple。

另外,字符串也可以看做是一种list,只不过操作结果依旧是字符串:

>>> 'abcdefg'[:5]
'abcde'
>>> 'abcdefg'[::2]
'aceg'