在Python中,range內建函數是非常有用的一個,但是發現對range參數的理解比較含糊,這里做個總結。
1. range(x): 從0開始,直到x,即區間[0, x)中的整數
>>> for i in range(5): ... print(i) ... 0 1 2 3 4
2. range(x, y):從x開始,直到y,即區間[x, y)中的整數,注意:x < y,否則range中無元素
>>> for i in range(1, 5): ... print i ... 1 2 3 4 >>> for i in range(5, 1): ... print i ... >>> for i in range(5, 5): ... print i ...
造成以上結果的原因在於,range的第三個參數step默認為1,即每次在x起始值上+step,且x + step < y。因此當x = 5,y = 1時,x + 1 = 5 + 1 = 6 > 1 = y, 所以range停止。同理,5 + 1 > 5,range(5, 5)也無輸出結果。
3. range(x, y, step):從x開始,直到y,步長為step,即 x <= x + n * step < y,其中n為1開始的整數。
>>> for i in range(1, 5, 2): ... print i ... 1 3 >>> for i in range(5, 1, -1): ... print i ... 5 4 3 2 >>> for i in range(5, 1, -2): ... print i ... 5 3 >>> for i in range(5, 1, 2): ... print i ...
因此,在上例中,range(5, 1, -1)依次打印5, 5 + (-1) * 1 = 4, 5 + (-1) * 2 = 3, 5 + (-1) * 3 = 2;而由於5 + 2 > 1,所以range(5, 1, 2)中無結果打印。
所以,對於第三個參數step,並不可以簡單的理解“負數代表翻轉”。