arange和 range 都是用来生成一系列有序数值的函数,但它们分别属于不同的 Python 库,并且在功能和返回类型上有所区别:
一、Python内置的range()函数:
range()函数在Python标准库中,主要用于生成一个等差数列的整数序列。
它不直接生成列表,而是返回一个可迭代对象。
range() 不占用额外的内存空间存放序列的所有元素,而是动态生成每个需要的值。
参数通常是三个:range(stop), range(start, stop), 或 range(start, stop, step),分别表示终止位置、起始位置和步长,所有参数都是整数,而且步长默认为1。
二、NumPy库的numpy.arange()函数:
arange()函数在NumPy库中,它也是用来生成等差数列,但相比 range() 功能更加强大。numpy.arange()` 可以生成浮点数序列,而不仅仅是整数序列。
它返回的是一个 NumPy 数组(numpy.ndarray`类型),也就是说,它会一次性生成并存储整个序列在内存中。(不需要用循环的原因)
参数与 range()类似,但允许使用浮点数步长,例如:`numpy.arange(start, stop, step, dtype=None),其中 dtype 参数允许指定输出数组的数据类型。
总结一下,两者的核心区别在于:
数据类型:range 生成的序列元素是整数,而 arange 可以生成整数或浮点数序列。
返回类型:range 返回的是一个可迭代对象,适合节省内存的大规模循环,而 arange 返回的是一个立即生成好的数组。
应用场景:range 通常用于Python语言的基本循环和迭代,arange 则更多地用于数值计算和数据分析等领域,因为它产生的数组可以直接用于NumPy的其他计算操作。
下面通过两个例子来说明它们的用法:
Python内置的range()
的例子:
# 生成包含前5个自然数的序列
for i in range(5):
print(i, end=' ')
# 输出: 0 1 2 3 4
# 生成从10开始到20结束(不包括20)的序列
for i in range(10, 20):
print(i, end=' ')
# 输出: 10 11 12 13 14 15 16 17 18 19
# 生成从0开始,每次增加2的序列,直到达到但不包括10
for i in range(0, 10, 2):
print(i, end=' ')
# 输出: 0 2 4 6 8
# 注意:range对象可以直接转换成列表查看全部元素
list(range(5)) # 输出: [0, 1, 2, 3, 4]
注: 在 Python 中,当我们使用 print()
函数打印多个值时,默认会在每个值之间添加换行符。如果希望在同一行内输出多个值,就需要修改这个默认行为。在提供的例子中加入 end=' '
参数是为了让每个 print()
函数调用结束后不在末尾添加换行符,而是添加一个空格,这样连续打印出的数字就会排列在同一行上。
NumPy的numpy.arange()
的例子:
import numpy as np
# 生成包含前5个自然数的数组(默认起点是0,步长是1)
np_arange_int = np.arange(5)
print(np_arange_int)
# 输出: [0 1 2 3 4]
# 生成从0开始到4结束(包含4)的浮点数序列,步长为0.5
np_arange_float = np.arange(0, 4.5, 0.5)
print(np_arange_float)
# 输出: [0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. ]
# 指定数据类型为整数
np_arange_spec_dtype = np.arange(5, dtype=np.int8)
print(np_arange_spec_dtype)
# 输出: [0 1 2 3 4]