range() 函数
内置函数 range() 用于生成等差数列:
>>>
for i in range(5):
print(i)
0
1
2
3
4
生成的序列绝不会包括给定的终止值;range(10) 生成 10 个值——长度为 10 的序列的所有合法索引。range 可以不从 0 开始,且可以按给定的步长递增(即使是负数步长):
>>>
list(range(5, 10))
[5, 6, 7, 8, 9]
list(range(0, 10, 3))
[0, 3, 6, 9]
list(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() 函数很方便,详见 循环的技巧。
如果直接打印一个 range 会发生意想不到的事情:
>>>
range(10)
range(0, 10)
range() 返回的对象在很多方面和列表的行为一样,但其实它和列表不一样。该对象只有在被迭代时才一个一个地返回所期望的列表项,并没有真正生成过一个含有全部项的列表,从而节省了空间。
这种对象称为可迭代对象 iterable,适合作为需要获取一系列值的函数或程序构件的参数。for 语句就是这样的程序构件;以可迭代对象作为参数的函数例如 sum():
>>>
sum(range(4)) # 0 + 1 + 2 + 3
6
之后我们会看到更多返回可迭代对象,或以可迭代对象作为参数的函数。在 数据结构 这一章中,我们将讨论 list() 的更多细节。
|