range() 函数是在 Python 中非常流行且广泛使用的函数,尤其是在使用 for 循环时,有时也会配合 while 循环。值得了解并熟练掌握 range(),因为它能打开许多大门:从控制程序流程到遍历用于数据分析的数据集,都会用到 range()。
如果您刚开始学习 Python 并希望了解更多,请参加 DataCamp 的 Introduction to Data Science in Python 课程。
什么是 Python 中的 range() 函数?
range() 函数返回一个数字序列,并且是不可变的,也就是说其值是固定的。range() 函数可接收一到三个参数,即 start、stop 和 step。
range() 在 Python3 中引入。在 Python2 中使用的是类似的函数 xrange(),其行为略有不同。比如,xrange() 返回的是生成器对象,内存占用更少,而 range() 则返回一个数字的列表或序列。
range() 函数之所以有用,部分原因在于它只存储 start、stop 和 step 三个值,与列表或元组相比更省内存。
Python range() 函数语法
range() 函数可以有三种形式,或可理解为三个 range() 参数:
range(stop_value):默认起点为 0。
range(start_value, stop_value):根据起止值生成序列。
range(start_value, stop_value, step_size):通过给起始值按步长递增,直到达到终止值为止来生成序列。
Python range() 函数。作者制图。
我们也可以通过在 range() 外包一层 type() 来检查 range() 的类型。
my_range = range(100)
print(type(my_range))
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
Python range() 函数示例
现在来看一些示例,帮助您练习并掌握 range() 的用法。
使用 Python range() 打印一串数字
先从一个简单示例开始:打印十个数字的序列,这将覆盖您的第一个 range() 参数形式。为此,您只需传入 stop 值。由于 Python 使用从 0 开始的索引,因此序列将从 0 开始,在指定数字处停止,即 n-1,其中 n 是 range() 中指定的数字。
my_range = range(10)
for num in my_range:
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
如预期,上述单元返回从 0 开始到 9 结束的数字序列。
将 Python range() 与 list() 搭配使用
您也可以将 range 函数作为 list 的参数使用,此时会得到一个长度等于 stop 值的数字列表,如下所示:
my_range = list(range(10))
print(my_range)
range_length = len(my_range)
print(range_length)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
在 Python range() 中使用 start、stop 和 step
接下来看看使用 range() 的另一种方式。这里您将同时指定 start 和 stop 值。
my_range = range(5, 10)
print(my_range)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
for num in range(5,10):
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
类似地,您也可以使用 range() 打印负整数值。
for num in range(-5,0):
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
现在为 range() 函数加入第三个参数,即 step 步长,看看它如何影响输出。您将指定 start 为 50,stop 为 1000,step 为 100。下面的 range 函数应输出一个从 50 开始、每次递增 100 的序列。
my_range = range(50,1000,100)
print(my_range)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
您会注意到它会打印所有的偶数。
for num in range(50,1000,100):
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
关于 Python range() 与浮点数的说明
需要注意的是,range() 只能在指定值为整数(整型)时工作。它不支持浮点数数据类型和字符串数据类型。不过,您可以向它传入正整数或负整数。来看当您尝试传入浮点数时会发生什么。
for num in range(0.2,2.4):
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
在用 C 语言反转一个整型链表时,您可能至少有一次抓耳挠腮。但在 Python 中,只需交换 start 与 stop,并加上一个负的步长,就能用 range() 实现。这是不是很简单?一起来看看!
for num in range(100,10,-10):
print(num)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
使用 range() 求列表之和
假设您有一个整数列表,希望使用 range() 来求列表的总和。让我们看看如何实现。
首先,定义由整数组成的列表。然后初始化一个计数器,每次遍历列表时都将当前列表值与旧的计数值相加并存储。
要访问列表中的元素,您将对列表的 length 使用 range() 函数,然后通过传入索引 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)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
您也可以使用 itertools 包中的 chain 类来拼接两个或多个 range()。不仅是 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)
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
Python range() 与相等性比较
您可以在 range() 之间进行相等性比较。给定两个 range(),如果它们表示的值序列相同,则被视为相等。也就是说,两个相等的 range() 并不需要拥有相同的 start、stop 和 step 属性。通过示例来理解。
print(range(0, 10, 3) == range(0, 11, 3))
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
print(range(0, 10, 3) == range(0, 11, 2))
技术支持
示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
从上述输出可以看到,尽管 range() 的参数不同,但由于两个函数的序列相同,仍被视为相等。在第二个例子中,更改 step 使比较结果为 False。
结语
恭喜您完成本教程。您可以继续尝试折腾一下 range() 函数,看看能否自定义它以接受除整数以外的数据类型。
如果读完之后觉得练习 Python 函数会有所帮助,不妨看看我们的 Python Functions 和 Beginner's Guide to Python for Loops 教程。想要系统化学习路径,可以了解我们的 Writing Efficient Python Code DataCamp 课程,该课程不仅深入讲解 range(),还涵盖更多通用的编码概念,帮助您在不增加太多开销的情况下写出高效代码。
range()函数是在 Python 中非常流行且广泛使用的函数,尤其是在使用for循环时,有时也会配合while循环。值得了解并熟练掌握range(),因为它能打开许多大门:从控制程序流程到遍历用于数据分析的数据集,都会用到range()。如果您刚开始学习 Python 并希望了解更多,请参加 DataCamp 的 Introduction to Data Science in Python 课程。
什么是 Python 中的 range() 函数?
range()函数返回一个数字序列,并且是不可变的,也就是说其值是固定的。range()函数可接收一到三个参数,即start、stop和step。range()在 Python3 中引入。在 Python2 中使用的是类似的函数xrange(),其行为略有不同。比如,xrange()返回的是生成器对象,内存占用更少,而range()则返回一个数字的列表或序列。range()函数之所以有用,部分原因在于它只存储start、stop和step三个值,与列表或元组相比更省内存。Python range() 函数语法
range()函数可以有三种形式,或可理解为三个range()参数:range(stop_value):默认起点为 0。range(start_value, stop_value):根据起止值生成序列。range(start_value, stop_value, step_size):通过给起始值按步长递增,直到达到终止值为止来生成序列。我们也可以通过在
range()外包一层type()来检查range()的类型。Python range() 函数示例
现在来看一些示例,帮助您练习并掌握
range()的用法。使用 Python range() 打印一串数字
先从一个简单示例开始:打印十个数字的序列,这将覆盖您的第一个
range()参数形式。为此,您只需传入stop值。由于 Python 使用从 0 开始的索引,因此序列将从 0 开始,在指定数字处停止,即n-1,其中n是range()中指定的数字。如预期,上述单元返回从
0开始到9结束的数字序列。将 Python range() 与 list() 搭配使用
您也可以将 range 函数作为 list 的参数使用,此时会得到一个长度等于 stop 值的数字列表,如下所示:
在 Python range() 中使用 start、stop 和 step
接下来看看使用
range()的另一种方式。这里您将同时指定start和stop值。类似地,您也可以使用
range()打印负整数值。现在为
range()函数加入第三个参数,即step步长,看看它如何影响输出。您将指定start为 50,stop为 1000,step为 100。下面的 range 函数应输出一个从 50 开始、每次递增 100 的序列。您会注意到它会打印所有的偶数。
关于 Python range() 与浮点数的说明
需要注意的是,
range()只能在指定值为整数(整型)时工作。它不支持浮点数数据类型和字符串数据类型。不过,您可以向它传入正整数或负整数。来看当您尝试传入浮点数时会发生什么。在用 C 语言反转一个整型链表时,您可能至少有一次抓耳挠腮。但在 Python 中,只需交换
start与stop,并加上一个负的步长,就能用range()实现。这是不是很简单?一起来看看!使用 range() 求列表之和
假设您有一个整数列表,希望使用
range()来求列表的总和。让我们看看如何实现。首先,定义由整数组成的列表。然后初始化一个计数器,每次遍历列表时都将当前列表值与旧的计数值相加并存储。
要访问列表中的元素,您将对列表的
length使用range()函数,然后通过传入索引i(从零开始到列表长度结束)来访问列表元素。将 range() 与 itertools 一起用于拼接列表
您也可以使用
itertools包中的chain类来拼接两个或多个range()。不仅是range,还可以拼接列表、元组等。请记住,chain方法返回一个生成器对象,要访问该生成器对象中的元素,您可以使用for循环,或使用list并将生成器对象作为参数传入。Python range() 与相等性比较
您可以在
range()之间进行相等性比较。给定两个range(),如果它们表示的值序列相同,则被视为相等。也就是说,两个相等的range()并不需要拥有相同的start、stop和step属性。通过示例来理解。从上述输出可以看到,尽管
range()的参数不同,但由于两个函数的序列相同,仍被视为相等。在第二个例子中,更改step使比较结果为False。结语
恭喜您完成本教程。您可以继续尝试折腾一下
range()函数,看看能否自定义它以接受除整数以外的数据类型。如果读完之后觉得练习 Python 函数会有所帮助,不妨看看我们的 Python Functions 和 Beginner's Guide to Python for Loops 教程。想要系统化学习路径,可以了解我们的 Writing Efficient Python Code DataCamp 课程,该课程不仅深入讲解
range(),还涵盖更多通用的编码概念,帮助您在不增加太多开销的情况下写出高效代码。