Python xrange с поплавком

Здесь начинающий программист.

Есть ли способ использовать значения с плавающей запятой в пределах xrange, а также значение шага? Я видел несколько решений для шага с поплавком, но не для фактических границ.

По сути, я хотел бы создать цикл, который спускается следующим образом:

for x in xrange(5.5,0,0.1):
     print x

Я думал определить разницу между двумя моими границами, разделить ее на значение шага, чтобы определить количество необходимых шагов, а затем ввести это как целочисленное значение в функцию xrange, но есть ли более простой способ?

Спасибо!


person micuzzo    schedule 03.02.2015    source источник
comment
Вы всегда можете просто использовать генератор. И назначьте его как лямбду, если хотите.   -  person user3467349    schedule 03.02.2015


Ответы (2)


Вы можете определить свой собственный «xrange» для поплавков, используя yield. Потому что нет встроенной функции для этого.

>>> def frange(start, stop, step):
...     x = start
...     while x < stop:
...         yield x
...         x += step

Тогда вы можете сделать

>>>for x in frange(5.5,0,0.1):
...    print x
person levi    schedule 03.02.2015
comment
Я видел это, но я еще не понимаю генераторы. Тем не менее, из моего это выведет массив, это правильно? - person micuzzo; 03.02.2015
comment
@micuzzo нет, frange в каждом цикле будет возвращать следующее число с плавающей запятой после добавления к нему step. Начиная с start по stop плавает. Итак, yield похож на оператор return без остановки вызова функции. - person levi; 03.02.2015
comment
спасибо за установление связи между определением функции и ее вызовом в другом месте, я все еще на довольно элементарном уровне. Говоря это, должно ли определение frange находиться в том же файле, из которого оно будет вызываться? @леви - person micuzzo; 03.02.2015
comment
@micuzzo Это ваш выбор, вы можете определить его в модуле и импортировать из другого места или просто определить в том же файле. - person levi; 03.02.2015

range ожидает целочисленные аргументы. Но вы можете сделать это с помощью:

for x in xrange(55,0,-1): print x*1.0/10

person aa333    schedule 03.02.2015
comment
Должно быть x/10. для версий Python 2.x Python. - person tom10; 03.02.2015