4.3. range() 函数
最后更新于:2022-04-01 00:47:33
如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差级数链表:
~~~
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
~~~
range(10) 生成了一个包含 10 个值的链表,它用链表的索引值填充了这个长度为 10 的列表,所生成的链表中不包括范围中的结束值。也可以让 range() 操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为 “步长”):
~~~
range(5, 10)
5 through 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
~~~
需要迭代链表索引的话,如下所示结合使 用 range() 和 len():
~~~
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
~~~
不过,这种场合可以方便的使用 enumerate(),请参见 [_循环技巧_](http://www.pythondoc.com/pythontutorial3/datastructures.html#tut-loopidioms)。
如果你只是打印一个序列的话会发生奇怪的事情:
~~~
>>> print(range(10))
range(0, 10)
~~~
在不同方面 range() 函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。
我们称此类对象是 _可迭代的_,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。我们已经见过的 for 语句就是这样一个迭代器。list() 函数是另外一个(_迭代器_ ),它从可迭代(对象)中创建列表:
~~~
>>> list(range(5))
[0, 1, 2, 3, 4]
~~~
稍后我们会看到更多返回可迭代(对象)和以可迭代(对象)作为参数的函数。