在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
是一个 numpy
函数,它生成一个 numpy
数组:
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
相比,这种方法速度较慢(这是一个实现细节)。
尽管名称相似,但这些不应被视为简单的替代品。在基本的Python结构中,如
for
循环和推导式中使用
range
。当您需要数组时,请使用
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
因此,在基本的Python代码中,您可能不会经常看到
range
被使用。
getsizeof()
能够给你复杂对象的完整内存使用情况。 - Klaus D.