python 的一些高级特性
切片
取一个 list 或 tuple 的部分元素是非常常见的操作。比如,我们要取出一个 list 的前 3 个元素
1 | >>>L = ['Michael', 'Sarah', 'Bob', 'Jack'] |
但是我们要取前 N 个元素,怎么办,可以用循环,但我们有更好的办法。Python 提供了切片(Slice)操作符,L[0:3]
表示,从索引 0 开始取,直到索引 3 为止,但不包括索引 3。即索引 0,1,2,正好是 3 个元素。
如果第一个索引是 0,还可以省略。而且也支持负数,记住倒数第一个元素的索引是-1。如:
1 | list(range(100)) L = |
tuple 也是一种 list,唯一区别是 tuple 不可变。因此,tuple 也可以用切片操作,只是操作的结果仍是 tuple
字符串’xxx’也可以看成是一种 list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串
迭代
如果给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple,这种遍历我们称为迭代(Iteration)
Python 的 for 循环不仅可以用在 list 或 tuple 上,还可以作用在其他可迭代对象上,只要是可迭代对象,无论有无下标,都可以迭代,比如 dict 就可以迭代。默认情况下,dict 迭代的是 key。如果要迭代 value,可以用 for value in d.values(),如果要同时迭代 key 和 value,可以用 for k, v in d.items()。由于字符串也是可迭代对象,因此,也可以作用于 for 循环。如:
1 | # 迭代dict |
那么,如何判断一个对象是可迭代对象呢?方法是通过 collections 模块的 Iterable 类型判断。如:
1 | from collections import Iterable |
还有一个问题,如果需要在循环中使用索引怎么办?Python 内置的 enumerate 函数可以把一个 list 变成索引-元素对,这样就可以在 for 循环中同时迭代索引和元素本身,如:
1 | for i, value in enumerate(['A', 'B', 'C']): |
[越努力,越幸运!]