本文讨论Python下的数值列表 - range(x,y,z)函数的应用,并分析其计数过程。
版权声明
本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。
本文不可以以纸质出版为目的进行改编、摘抄。
1. range(x)、range(x,y)
1 | print("output of range(5):") |
执行结果:
1 | output of range(5): |
range(x,y) |
---|
- range(x,y)函数从x开始计数,到y-1停止,不含y,产生一个整数集合; |
- 可以看到,range(2,5)产生了数值列表[2,3,4](4即5-1); |
- range(x)是range(0,x)的简写形式,range(5)等效于range(0,5)。 |
range(x,y)在解释器内部并不是一个严格意义上的列表,而是一个称为range的不常用的数据类型。如下述代码所示:
1 | #rangelist2.py |
执行结果:
1 | 2 |
如果真的需要把range转换成列表,可以通过类型转换实现:
1 | #range2list.py |
执行结果:
1 | <class 'list'> [0, 1, 2, 3, 4] |
2. range(x,y,z)
更复杂的range形式:
1 | #fours.py |
执行结果:
1 | [0, 4, 8, 12, 16] |
range(x,y,z) |
---|
- 可以看出,range(0,17,4)从0开始计数,每计数1次,计数值加4,直到计数值>=17为止。但需要注意,仅那些小于17的计数值会被输出; |
- range(x,y)等价于range(x,y,1); |
- range(x)等价于range(0,x,1)。 |
3 理解range计数过程
读者或许对range(x,y,z)的输出结果感到疑惑,看看下面这个流程图。
现以range(0,17,4)为例,依上述流程图说明输出集合为什么是[0,4,8,12,16]。首先,计数取值x=0,然后开始循环:
1 | - 0 < 17,输出0; |
如果你有C/C++经验,下述代码更容易描述range(x,y,z)的计数过程,事实上,Python的解释器就是用C/C++编写的。
1 | for (int i=x;i<y;i+=z){ |
上述range(x,y,z),如果z<0,相应流程图如下:
作者试了试如下代码:
1 | numbers = list(range(9,2,-2)) |
执行结果:
1 | [9, 7, 5, 3] |
该你了,请依上述流程图,人肉执行range(9,2,-2)的计数过程,验证上述输出。
如果你有C/C++经验,下面的代码能更容易地解释z小于0时range(9,2,-2)的计数过程:
1 | for (int i=x;i>y;i+=z){ |
本文内容节选自作者编著的《Python编程基础及应用》(高等教育出版社)一书。
免费随书B站MOOC: