Функция диапазона Python - PullRequest
       3

Функция диапазона Python

17 голосов
/ 23 сентября 2011

Скажем, я хочу зациклить от 0 до 100, но с шагом 1/2. Если вы попробуете

for i in range(0, 100, 0.5):
    whatever

это вызывает ошибку, говорящую, что шаг не должен быть 0. Есть ли какой-нибудь встроенный способ сделать что-то подобное?

Я использую Python 2.x.

Ответы [ 6 ]

21 голосов
/ 23 сентября 2011
In [1]: for i in range(0, int(100 / 0.5)):
   ...:     print 0.5 * i
   ...:     
   ...:     
0.0
0.5
1.0
1.5
...
98.0
98.5
99.0
99.5

Если вы можете использовать numpy, то numpy.arange(0, 100, 0.5) также сработает.

9 голосов
/ 23 сентября 2011

Если у вас есть numpy, вот два способа сделать это:

numpy.arange(0, 100, 0.5)

numpy.linspace(0, 100, 200, endpoint=False)
4 голосов
/ 23 сентября 2011

Вы должны использовать целочисленные шаги для range () и xrange(). Вот почему ваш шаг 0,5 внутренне преобразуется в 0, и вы получаете эту ошибку. Попробуйте for i in [j / 2.0 for j in xrange(100 * 2)]:

3 голосов
/ 23 сентября 2011

Вам придется либо создать цикл вручную, либо определить собственную функцию диапазона.Для встроенной функции требуется целочисленное значение шага.

0 голосов
/ 23 сентября 2011

Для больших диапазонов лучше использовать выражение генератора, чем явное построение списка:

 for k in ( i*0.5 for i in range(200) ):
     print k

Это потребляет не так много дополнительной памяти, быстро и легко читается. Смотри http://docs.python.org/tutorial/classes.html#generator-expressions

0 голосов
/ 23 сентября 2011
for x in map(lambda i: i * 0.5, range(0,200)):
  #Do something with x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...