Python数据类型之“序列概述与基本序列类型(Bas(6)

range类型表示一个不可变的数字序列,通常用于在for循环中循环特定次数。

range类构建函数 class range(stop) class range(start, stop[, step]) start:表述数字序列开始值,如果该参数没有被提供则值为0 stop: 数字序列结束值 stop: 数字序列步长,如果该参数没有被提供则值为1

关于start、stop、step参数值的说明:

这些参数必须是整型值(内建 int或者任何实现了__index__ 特殊方法的任意对象)

如果start参数被忽略,其默认值为0;如果step参数被忽略,其默认值为1;如果step为0,则会抛出ValueError错误

如果step参数为正数,那么range类型对象r的内容公式为:r[i] = start + step*i,约束条件为:i >= 0 且 r[i] < stop

如果step参数为负数,那么range类型对象r的内容公式仍然为:r[i] = start + step*i,但是约束条件为:i >= 0 且 r[i] > stop

如果r[0]不满足约束条件,range对象的值将为空

range对象可以包含绝对值大于sys.maxsize的值,但是某些功能(如:len())可能会引发OverflowError

range示例 >>> list(range(10)) # start没有指定,默认值为0,即start=0,end=10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(1,11)) # start=1, end=11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(range(0, 11, 2)) # 要指定step就必须要指定start [0, 2, 4, 6, 8, 10] >>> list(range(0, -10, -1)) # step为负数 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> list(range(0)) [] >>> list(range(10, 5)) # 如果end < start ,则range对象为空 []

这里需要注意一下,Python 2.x中的range()函数返回的是一个list类型,而Python 3.x中的range()函数返回的是一个range类型。

Python 2.x

>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>

Python 3.x

>>> range(10) range(0, 10)

range实现了除连接(concatenation)和重复(repetition)之外的所有通用序列操作,这是由于range对象只能表示遵循严格模式的序列,而连接和重复操作通常会违反这个模式。

range相对于常规list和tuple的优点在于:无论它表示的范围的大小是多少,它始终占用相同(小)量的内存。这是因为它只需要存储 start、end和step这3个值,然后根据需要计算各个条目和子范围。

说明:

测试range对象是否相等与序列一样通过 == 和 != 进行比较,也就是说,如果两个range对象表示相同值的序列就被认为是相等的。需要注意的是,比较相等的两个range对象可能具有不同的start、end、step参数值,例如 (0) == (2, 1),又例如 (0, 3, 2) == (0, 4, 2)


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/24d410b85e7f6a2f658f07e3275ec01d.html