range类型表示一个不可变的数字序列,通常用于在for循环中循环特定的次数。
class range(stop)
class range(start, stop[, step])
范围构造函数的参数必须是整数(内置的int或任何实现__index__特殊方法的对象)。如果省略了step参数,则默认为1。如果忽略start参数,它默认为0。如果步骤为零,则会引发ValueError。 1.对于正步骤,范围r的内容由公式r[i] = start + step*i确定,其中i >= 0, r[i] < stop。 2.对于负步,范围的内容仍然由公式r[i] = start + step*i决定,但约束条件是i >= 0和r[i] > stop。 3.如果r[0]不满足值约束,则范围对象将为空。范围确实支持负索引,但它们被解释为从由正索引决定的序列的末尾开始的索引。 4.包含绝对值大于sys的范围。maxsize是允许的,但是某些特性(如len())可能会导致OverflowError。
范围的例子:
>>> 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)) []
range实现除了连接和重复之外的所有公共序列操作(由于range对象只能表示遵循严格模式的序列,而重复和连接通常会违反该模式)。
start:开始参数的值(如果没有提供参数,则为0)
stop:停止参数的值。
step:步骤参数的值(如果没有提供参数,则为1)
的优势范围类型/常规列表或元组是一系列对象总是采取相同的(小)的内存数量,无论它所代表的范围的大小(因为它只存储启动、停止和步值,计算所需的个别项目和子范围)。
范围对象实现集合。序列ABC,并提供一些特性,如容器测试、元素索引查找、切片和对负索引的支持(参见序列类型——列表、tuple、范围):
>>> r = range(0, 20, 2) >>> r 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测试范围对象是否与==和!=相等。也就是说,如果两个范围对象代表相同的值序列,那么它们就被认为是相等的。(注意,比较相等的两个范围对象可能具有不同的开始、停止和步骤属性,例如range(0) = range(2,1,3)或range(0,3,2) = range(0,4,2))。
在版本3.2中更改:实现序列ABC。支持切片和负索引。测试int对象的成员关系,而不是遍历所有项目。
在版本3.3中更改:定义' = '和' != '根据定义的值序列比较范围对象(而不是基于对象标识进行比较)。
新版本3.3:开始、停止和步骤属性。
翻译自官方文档:https://docs.python.org/3/library/stdtypes.html?highlight=range#range