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,并不可以简单的理解“负数代表翻转”

 

posted @ 2012-11-05 17:58  YUKI小糖  阅读(11398)  评论(1编辑  收藏  举报