In PY3, range
是一个可以生成数字序列的对象;这不是实际的顺序。您可能需要温习一些基本的 Python 阅读内容,注意列表和生成器等内容以及它们的差异。
In [359]: x = range(3)
In [360]: x
Out[360]: range(0, 3)
我们使用类似的东西list
或实际创建这些数字的列表理解:
In [361]: list(x)
Out[361]: [0, 1, 2]
In [362]: [i for i in x]
Out[362]: [0, 1, 2]
范围经常用于for i in range(3): print(i)
一种循环。
arange
is a numpy
产生一个函数numpy
array:
In [363]: arr = np.arange(3)
In [364]: arr
Out[364]: array([0, 1, 2])
我们可以迭代这样的数组,但它比 [362] 慢:
In [365]: [i for i in arr]
Out[365]: [0, 1, 2]
但对于数学计算来说,数组要好得多:
In [366]: arr * 10
Out[366]: array([ 0, 10, 20])
该数组也可以从列表 [361] 创建(并且为了与早期的 Py2 使用兼容)range
本身):
In [376]: np.array(list(x)) # np.array(x)
Out[376]: array([0, 1, 2])
但这比使用慢arange
直接(这是一个实现细节)。
尽管名称相似,但它们不应被视为简单的替代品。使用range
在基本的 Python 结构中,例如for
循环和理解。使用arange
当你需要一个数组时。
Python 的一个重要创新(与早期语言相比)是我们可以直接在列表上进行迭代。我们不必单步执行索引。如果我们需要索引和值,我们可以使用enumerate
:
In [378]: alist = ['a','b','c']
In [379]: for i in range(3): print(alist[i]) # index iteration
a
b
c
In [380]: for v in alist: print(v) # iterate on list directly
a
b
c
In [381]: for i,v in enumerate(alist): print(i,v) # index and values
0 a
1 b
2 c
因此你可能看不到range
在基本的 Python 代码中使用了这么多。