Python range()函数

原文: https://thepythonguru.com/python-builtin-functions/range/


于 2020 年 1 月 7 日更新


range()函数用于随时间生成一系列数字。 简单地说,它接受一个整数并返回一个范围对象(一种可迭代的类型)。 在 Python 2 中,range()返回一个list,它对处理大数据不是很有效。

range()函数的语法如下:

语法

  1. range([start,] stop [, step]) -> range object
参数 描述
start (可选)序列的起点。 默认为0
stop(必填) 序列的端点。 该项目将不包括在序列中。
step(可选) 序列的步长。 默认为1

现在让我们看几个示例,以了解range()的工作方式:

示例 1

  1. >>>
  2. >>> range(5)
  3. range(0, 5)
  4. >>>
  5. >>> list(range(5)) # list() call is not required in Python 2
  6. [0, 1, 2, 3, 4]
  7. >>>

试试看:

  1. print(range(5))
  2. # list() call is not required in Python 2
  3. print(list(range(5)))

当使用单个参数调用range()时,它将生成从0到指定参数(但不包括它)的数字序列。 因此,序列中不包含数字5

示例 2

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

试一试:

  1. print(range(5, 10))
  2. print(list(range(5, 10)))

在这里range()用两个参数510调用。 结果,它将生成从510(但不包括10)的数字序列。

您还可以指定负数:

  1. >>>
  2. >>> list(range(-2, 2))
  3. [-2, -1, 0, 1]
  4. >>>
  5. >>> list(range(-100, -95))
  6. [-100, -99, -98, -97, -96]
  7. >>>

试一试:

  1. print(list(range(-2, 2)))
  2. print(list(range(-100, -95)))

示例 3

  1. >>>
  2. >>> range(1, 20, 3)
  3. range(1, 20, 3)
  4. >>>
  5. >>>
  6. >>> list(range(1, 20, 3))
  7. [1, 4, 7, 10, 13, 16, 19]
  8. >>>

试一试:

  1. print( range(1, 20, 3))
  2. print(list(range(1, 20, 3)))

在这里range()函数被3step参数调用,因此它将每隔三个元素从1返回到20(当然不包括20)。

您也可以使用步骤参数来倒数。

  1. >>>
  2. >>> list(range(20, 10, -1))
  3. [20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
  4. >>>
  5. >>> list(range(20, 10, -5))
  6. [20, 15]
  7. >>>

试一试:

  1. print(list(range(20, 10, -1)))
  2. print(list(range(20, 10, -5)))

range()函数通常与for循环一起使用以重复执行一定次数的操作。 例如,在下面的清单中,我们使用range()执行循环主体 5 次。

  1. >>>
  2. >>> for i in range(5):
  3. ... print(i)
  4. ...
  5. 0
  6. 1
  7. 2
  8. 3
  9. 4
  10. >>>

试一试:

  1. for i in range(5):
  2. print(i)

该代码在功能上等同于以下代码:

  1. >>>
  2. >>> for i in [0, 1, 2, 3, 4]:
  3. ... print(i)
  4. ...
  5. 0
  6. 1
  7. 2
  8. 3
  9. 4
  10. >>>

但是,在实际代码中,应始终使用range(),因为它简洁,灵活且性能更好。