一、切片
取一個list或tuple的部分元素是非常常見的操作。
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3]
表示,從索引0
開始取,直到索引3
爲止,但不包括索引3。
如果第一個索引是0
,還可以省略爲L[:3]。
什麼都不寫,只寫[:]就可以原樣複製一個list。
tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple。
(0, 1, 2, 3, 4, 5)[:3]
字符串'xxx'
也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串。
二、迭代
Python的for
循環不僅可以用在list或tuple上
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key)
dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同時迭代key和value,可以用for k, v in d.items()。
如何判斷一個對象是可迭代對象呢?方法是通過collections模塊的Iterable類型判斷。
from collections import Iterable
isinstance('abc', Iterable)
三、列表生成式
生成[1x1, 2x2, 3x3, ..., 10x10],
要生成的元素x * x
放到前面,後面跟for
循環,就可以把list創建出來。
[x * x for x in range(1, 11) if x % 2 == 0]
還可以使用兩層循環,可以生成全排列:
[m + n for m in 'ABC' for n in 'XYZ']
四、生成器
第一種方法,只要把一個列表生成式的[]
改成()
,就創建了一個generator。
第二種方法,如果一個函數定義中包含yield
關鍵字,那麼這個函數就不再是一個普通函數,而是一個generator。generator和函數的執行流程不一樣。函數是順序執行,遇到return
語句或者最後一行函數語句就返回。而變成generator的函數,在每次調用next()
的時候執行,遇到yield
語句返回,再次執行時從上次返回的yield
語句處繼續執行。
五、迭代器
可以使用isinstance()
判斷一個對象是否是Iterable
對象。
from collections import Iterable
isinstance([], Iterable)
可以使用isinstance()
判斷一個對象是否是Iterator
對象。
from collections import Iterator
isinstance((x for x in range(10)), Iterator)。