Ответ 1
Python2.x:
for idx in range(0, int(100 / 0.5)):
print 0.5 * idx
выходы:
0.0
0.5
1.0
1.5
..
99.0
99.5
Numpy:
numpy.arange
тоже справится.
numpy.arange(0, 100, 0.5)
Скажем, я хочу зациклить от 0 до 100, но с шагом 1/2. Если вы попробуете
for i in range(0, 100, 0.5):
whatever
Ошибка:
шаг не должен быть 0
Вопрос: Есть ли встроенный способ в Python 2.x, чтобы сделать что-то вроде этого?
Python2.x:
for idx in range(0, int(100 / 0.5)):
print 0.5 * idx
выходы:
0.0
0.5
1.0
1.5
..
99.0
99.5
Numpy:
numpy.arange
тоже справится.
numpy.arange(0, 100, 0.5)
Если у вас numpy
, вот два способа сделать это:
numpy.arange(0, 100, 0.5)
numpy.linspace(0, 100, 200, endpoint=False)
Вы должны использовать целые шаги для range
() и xrange()
. Таким образом, ваш 0.5 шаг получает внутренне преобразован в 0, и вы получите эту ошибку. Попробуйте for i in [j / 2.0 for j in xrange(100 * 2)]:
Вам придется либо создать цикл вручную, либо определить свою собственную функцию диапазона. Для встроенного значения требуется целочисленное значение шага.
for x in map(lambda i: i * 0.5, range(0,200)):
#Do something with x
Для больших диапазонов лучше использовать выражение генератора, чем строгий список:
for k in ( i*0.5 for i in range(200) ):
print k
Это потребляет не много дополнительной памяти, быстро и легко читается. См. http://docs.python.org/tutorial/classes.html#generator-expressions