本文仅供个人记录和复习,不用于其他用途
简化代码
Python的代码追求简洁,越简单越好。那么,为了写出简短的代码,Python中也有很多技巧来帮助我们实现这一目的。
切片
我们现在有一个list,如果要取它的前三个元素,你会怎么做呢?
|
|
然而问题扩展一下,比如取前n个元素,我们这个代码就没用了。所以呢,我们可以使用循环来做:
|
|
这样一来,我们只需修改n的值,就能够轻松解决问题。不过,频繁使用循环过于繁琐,所以我们可以使用切片(Slice),能够大大简化操作:
|
|
L[0:3]
表示索引从0开始,一直到3结束(不包括3)。这个有点类似于C++中的泛型循环for(auto &e : array)
,不过这个更加方便一点。
而且如果第一个索引为0,还可以省略不写:
|
|
当然,我们也可以倒数切片,-1也可以省略:
|
|
切片操作的用法不止这些,比如我们先创建一个数列:
>>> 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'