2014-11-22 2 views
1

Есть ли функция диапазона() в Python для чисел с плавающей точкой, например Python: функция диапазона для десятичных чисел

a=0.6 

if a in range(0,1): 
    a=3 

Как я могу осуществить это?

+1

Почему бы просто не использовать 'if 0 <= a <1: a = 3'? –

+0

Возможный дубликат: http://stackoverflow.com/questions/477486/python-decimal-range-step-value –

ответ

2

Подобный вопрос связан по Begueradj, но немного отличается (заметьте, поплавки не такой же, как после десятичной точки):

import decimal 

def drange(start, stop, step=decimal.Decimal('1')): 
    while start < stop: 
     yield start 
     start += step 

print(list(drange(
    decimal.Decimal('1.25'), 
    decimal.Decimal('2.34'), 
    decimal.Decimal('0.1'), 
))) 

Выход:

[Decimal('1.25'), Decimal('1.35'), Decimal('1.45'), Decimal('1.55'), 
Decimal('1.65'), Decimal('1.75'), Decimal('1.85'), Decimal('1.95'), 
Decimal('2.05'), Decimal('2.15'), Decimal('2.25')] 
+0

Обратите внимание, что он не может иметь дело с нисходящими диапазонами, например 'drange (10, 0, -1)'. – GingerPlusPlus

0

если у вас есть NumPy установлен сделать:

>>> импорт numpy

>>> печати np.arange (0,1,0.1)

массив ([0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9])

, если у вас нет установленного Numpy, обязательно получите его.

4

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

a = 0.6 
if 0 <= a < 1: # change to `<= 1` to be inclusive 
    a = 3 

Вам не нужно, чтобы создать диапазон и сделать тестирование членства - если не вами имеют дискретный набор значений, который должен совпадать с вашим a - встроенный range в Python 3.x может выполнять эффективный поиск для int, так как он может оптимизировать тестирование членства. Если у вас есть большое количество дискретных значений в большом диапазоне, тогда вам было бы лучше делать это математически в любом случае.

-1

Если вы хотите, чтобы проверить, является ли это между двумя числами, лучше использовать:
0 <=a<=1
В противном случае, если вам нужен список сказать 0 до 1 в 0,1 скачках вы можете использовать этот код для его создания:
lst = map(lambda x: x/10.0, range(11))

Смежные вопросы