range()循环
range()函数: link.
len()函数: link.
iterable: link.
sum: link.
1.range对象的一些例子
- range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
- range 对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。
- 如果需要遍历一个数字序列,则可以采取
for i in range(5):
print(i)
0
1
2
3
4
- 如需要以序列的索引来迭代,则您可以将 range() 和 len() 组合如下:
a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
print(i, a[i])
当然一般这种情况,使用enumerate()可以将索引位置和对应的值同时取出。
for i,v in enumerate(a):
print(i,v)
2.range 对象
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
class range(stop)
class range(start, stop[, step])
r=range(start,stop,step)
如果 step
为正值,确定 range 中r
内容的公式为 r[i] = start + step*i
其中 i >= 0 且 r[i] < stop。
如果 step
为负值,确定 range 内容的公式仍然为 r[i] = start + step*i,但限制条件改为 i >= 0 且 r[i] > stop.
如果 r[0]
不符合值的限制条件,则该 range 对象为空。 range 对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
[]
>>> list(range(1, 0))
[]
list(range(2,2))
Out[1]: []
range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start, stop 和 step 值,并会根据需要计算具体单项或子范围的值)。
提供如包含检测、元素索引查找、切片等特性,并支持负索引 (参见 序列类型 — list, tuple, range):
r = range(0, 20, 2)
r
Out[4]: range(0, 20, 2)
11 in r
False
10 in r
True
r.index(10)
5
r[5]
10
r[:5]
range(0, 10, 2)
r[-1]
18
3.iterable可迭代对象
range() 所返回的对象在许多方面表现得像一个列表,但实际上却并不是。此对象会在你迭代它时基于所希望的序列返回连续的项,但它没有真正生成列表,这样就能节省空间。
我们称这样对象为 iterable,也就是说,适合作为这样的目标对象:函数和结构期望从中获取连续的项直到所提供的项全部耗尽。 我们已经看到 for 语句就是这样一种结构,而接受可迭代对象的函数的一个例子是 sum():
>>> sum(range(4)) # 0 + 1 + 2 + 3
6
稍后我们将看到更多返回可迭代对象以及将可迭代对象作为参数的函数。 最后,也许你会很好奇如何从一个指定范围内获取一个列表。 以下是解决方案:
>>> list(range(4))
[0, 1, 2, 3]