个性化阅读
专注于IT技术分析

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()函数2

首先让我们检查一下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)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-32-4d2f304928d0> in <module>
----> 1 for seq in range(0.2, 2.4):
      2     print(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 = 0

for 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

你也可以使用称为chain的itertools包类来连接两个或多个范围函数。不仅仅是range函数, 你甚至可以连接列表, 元组等。请记住, chain方法返回一个生成器对象, 并且要访问该生成器对象中的元素, 你可以使用for循环或使用list并传递生成器对象作为它的参数。

from itertools import chain

a1 = 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数据科学入门课程。

赞(0)
未经允许不得转载:srcmini » Python Range()函数

评论 抢沙发

评论前必须登录!