Python Range()函数

如果你刚刚开始使用Python, 并且想了解更多信息, 请参加srcmini的Python数据科学入门课程。
在今天的教程中, 你将学习一个称为range()函数的内置Python函数。它是Python中非常流行且广泛使用的函数, 尤其是当你主要使用for循环, 有时使用while循环时。它返回一个数字序列, 并且是不可变的(其值是固定的)。范围函数采用一个或最多三个参数, 即开始和结束值以及步长。
Range函数仅在Python3中引入, 而在Python2中, 使用了类似的函数xrange(), 该函数用于返回生成器对象并消耗较少的内存。另一方面, range()函数返回一个数字列表或数字序列, 并且比xrange()占用更多的内存。
由于range()函数仅存储开始值, 停止值和步长值, 因此与列表或元组相比, 无论它代表的范围是多少, 它消耗的内存量都更少。
range()函数可以用三种不同的方式表示, 或者你可以将它们视为三个范围参数:

  • range(stop_value):默认情况下, 这会将起点视为零。
  • range(start_value, stop_value):这将基于起始值和终止值生成序列。
  • range(start_value, stop_value, step_size):通过使用步长递增起始值直到达到终止值来生成序列。
Python Range()函数

文章图片
首先让我们检查一下range()函数的类型。
type(range(100))

range

让我们从打印十个数字的序列的简单示例开始, 这将覆盖你的第一个range参数。
  • 为此, 你只需传递停止值。由于Python在基于零的索引上工作, 因此该序列将从零开始并在指定的数字即$ n-1 $处停止, 其中$ n $是range函数中的指定数字。
range(10) #it should return a lower and an upper bound value.

range(0, 10)

for seq in range(10): print(seq)

0 1 2 3 4 5 6 7 8 9

如预期的那样, 上述单元格返回一个以$ 0 $开始, 以$ 9 $结尾的数字序列。
你还可以将range函数用作列表的参数, 在这种情况下, 它将导致长度等于停止值的数字列表, 如下所示:
list(range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

len(list(range(10)))

10

  • 接下来, 让我们看一下使用范围函数的第二种方法。在这里, 你将指定起始值和终止值。
range(5, 10)

range(5, 10)

for seq in range(5, 10): print(seq)

5 6 7 8 9

同样, 你也可以使用范围函数来打印负整数值。
for seq in range(-5, 0): print(seq)

-5 -4 -3 -2 -1

list(range(10, 20))

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

  • 现在, 我们将第三个参数(即步长)添加到范围函数, 并了解它如何影响输出。你将起点指定为50, 终点值/终止值指定为1000, 步长为100。下面的范围函数应输出从50开始的步长为100的序列。
range(50, 1000, 100)

range(50, 1000, 100)

你会注意到它将打印所有偶数。
for seq in range(50, 1000, 100): print(seq)

50 150 250 350 450 550 650 750 850 950

重要的是要注意, range()函数仅在指定值是整数或整数时才可以工作。它不支持浮点数据类型和字符串数据类型。但是, 你可以将正整数值和负整数值都传递给它。
让我们看看尝试传递浮点值时会发生什么。
for seq in range(0.2, 2.4): print(seq)

---------------------------------------------------------------------------TypeErrorTraceback (most recent call last)< ipython-input-32-4d2f304928d0> in < module> ----> 1 for seq in range(0.2, 2.4): 2print(seq)TypeError: 'float' object cannot be interpreted as an integer

  • 尝试反转C语言中的整数值链接列表时, 你至少会挠头。但是, 在python中, 可以通过使用range函数来实现, 只需交换开始和停止以及增加负步长即可。
    这不是那么简单吗?让我们找出答案!
for seq in range(100, 10, -10): print(seq)

100 90 80 70 60 50 40 30 20

假设你有一个整数值列表, 并且想使用list()函数找到列表的总和。让我们找出可以解决的问题。
首先, 你将定义由整数值组成的列表。然后初始化一个计数器, 每次在列表上进行迭代时将在其中存储值, 并将当前列表值与旧计数值相加。
要访问列表中的元素, 你将在列表的长度上应用范围函数, 然后绕过索引i来访问列表元素, 索引i从零开始, 在列表的长度处停止。
list1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] count = 0for i in range(len(list1)): count = count + list1[i] print(count) print('sum of the list:', count)

2 6 12 20 30 42 56 72 90 110 sum of the list: 110

【Python Range()函数】你也可以使用称为chain的itertools包类来连接两个或多个范围函数。不仅仅是range函数, 你甚至可以连接列表, 元组等。请记住, chain方法返回一个生成器对象, 并且要访问该生成器对象中的元素, 你可以使用for循环或使用list并传递生成器对象作为它的参数。
from itertools import chaina1 = range(10, 0, -2) a2 = range(30, 20, -2) a3 = range(50, 40, -2)final = chain(a1, a2, a3)print(final) #generator object

< itertools.chain object at 0x107155490>

print(list(final))

[10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]

你可以在范围函数之间应用相等比较。给定两个范围函数, 如果它们表示相同的值序列, 则认为它们相等。话虽如此, 两个相等范围的函数不必具有相同的开始, 停止和步进属性。
让我们通过一个例子来理解它。
list(range(0, 10, 3))

[0, 3, 6, 9]

list(range(0, 11, 3))

[0, 3, 6, 9]

range(0, 10, 3) == range(0, 11, 3)

True

range(0, 10, 3) == range(0, 11, 2)

False

从上述输出中可以看到, 即使范围函数的参数不同, 但由于两个函数的顺序相同, 它们仍被视为相等。在第二个示例中, 更改步长会使比较结果为False。
总结 恭喜你完成了本教程。
你可能想对Range函数进行一些修改, 并找到一种自定义它的方法, 以接受除整数以外的数据类型。
请随时在下面的评论部分中提出与本教程相关的任何问题。
如果你刚刚开始使用Python, 并且想了解更多信息, 请参加srcmini的Python数据科学入门课程。

    推荐阅读