如果你刚刚开始使用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):通过使用步长递增起始值直到达到终止值来生成序列。
文章图片
首先让我们检查一下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数据科学入门课程。
推荐阅读
- Python Print()函数
- Android-WebView加载网络图片&网页
- 使用maven的mybatis-generator代码生成器插件生成实体类mapper配置文件和mapper接口(使用idea)
- uniApp——v-for 动态class动态style
- WebAppInitializer类,代替web.xml
- AndroidAndroid Studio真机调试的问题统整
- kibana提示"[illegal_argument_exception] mapper [hits] cannot be changed from type [long] to [inte
- Android广播的使用(自定义广播和本地广播)
- Android广播的使用(动态注册和静态注册)