range 函数中步长的理解
在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,并不可以简单的理解“负数代表翻转”。