В PY3 range
- это объект, который может генерировать последовательность чисел; это не настоящая последовательность. Возможно, вам потребуется sh на некоторых основных c 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)
типе l oop.
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
напрямую (это деталь реализации).
Несмотря на схожесть имен, их не следует рассматривать как простые альтернативы. Используйте range
в базовых конструкциях c Python, таких как for
l oop и понимание. Используйте 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
используется так много в базовом c Python коде.