介绍
- range 是一个类,不是函数
- 表示不可变的数字序列,通常用于在 for 循环中循环指定的次数
两种语法格式
range(stop)
- 表示区间 [0, stop) 内的整数序列
- 该区间从 0 开始、到 stop 结束,不包含 stop
range(start, stop[, step])
- 表示区间 [start, stop) 内的整数序列
- 该区间从 start 开始、到 end 结束,不包含 end
- step 是步进,默认是 1
step 的取值规则
- 如果 step 为正值,确定 range 某个值的公式为
r[i] = start + step*i
其中i >= 0
且r[i] < stop
- 如果 step 为负值,确定 range 某个值的公式仍然为
r[i] = start + step*i
,但限制条件改为i >= 0
且r[i] > stop
返回值
都是 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] >>> tuple(range(0, 10, 3)) (0, 3, 6, 9)>>> set(range(0, -10, -1)) {0, -1, -2, -3, -4, -5, -6, -7, -8, -9} >>> list(range(0)) [] >>> list(range(1, 0)) []
range 的优势
相比常规的 list、tuple,range 的优势在于range 对象总是占用固定数量的较小内存,无论其所表示的范围有多大
range 的特性
range 对象实现了 collections.abc.Sequence ,提供了包括 index、索引、切片等特性
r = range(0, 20, 2) print(r) print(list(r)) # in print(10 in r) print(11 not in r) # index print(r.index(6)) # 切片 print(r[2]) print(r[-1]) # 输出结果 range(0, 20, 2) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] True True 3 4 18
但是切片仅支持索引取值 [ ],不支持 [ : ] 来取值
==、!= 操作
使用 ==
和 !=
检测 range 对象是否相等是将其作为序列来比较
r1 = range(0, 4, 2) r2 = range(0, 3, 2) print(r1 == r2) # 输出结果 True
循环遍历 range
for item in range(3): print(item) # 输出结果 0 1 2