range()
파이썬에서 float에 해당 하는 것이 있습니까?
>>> range(0.5,5,1.5)
[0, 1, 2, 3, 4]
>>> range(0.5,5,0.5)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
range(0.5,5,0.5)
ValueError: range() step argument must not be zero
답변
나는이 내장 된 기능 모르겠지만, 같은 한 서면 이 너무 복잡하지 않아야합니다.
def frange(x, y, jump):
while x < y:
yield x
x += jump
의견에서 언급했듯이 다음과 같은 예기치 않은 결과가 발생할 수 있습니다.
>>> list(frange(0, 100, 0.1))[-1]
99.9999999999986
예상 결과를 얻으려면이 질문에 다른 답변 중 하나를 사용하거나 @Tadhg에서 언급했듯이 인수 decimal.Decimal
로 사용할 수 있습니다 jump
. float 대신 문자열로 초기화하십시오.
>>> import decimal
>>> list(frange(0, 100, decimal.Decimal('0.1')))[-1]
Decimal('99.9')
또는:
import decimal
def drange(x, y, jump):
while x < y:
yield float(x)
x += decimal.Decimal(jump)
그리고:
>>> list(drange(0, 100, '0.1'))[-1]
99.9
답변
다음 중 하나를 사용할 수 있습니다.
[x / 10.0 for x in range(5, 50, 15)]
또는 람다 /지도를 사용하십시오 :
map(lambda x: x/10.0, range(5, 50, 15))
답변
예전에는 사용 numpy.arange
했지만 부동 소수점 오류로 인해 반환되는 요소 수를 제어하는 데 약간의 문제가있었습니다. 이제는 다음과 같이 사용합니다 linspace
.
>>> import numpy
>>> numpy.linspace(0, 10, num=4)
array([ 0. , 3.33333333, 6.66666667, 10. ])
답변
Pylab에는 frange
(실제로 래퍼 matplotlib.mlab.frange
)가 있습니다.
>>> import pylab as pl
>>> pl.frange(0.5,5,0.5)
array([ 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ])
답변
열심히 평가 (2.x range
) :
[x * .5 for x in range(10)]
지연 평가 (2.x xrange
, 3.x range
) :
itertools.imap(lambda x: x * .5, xrange(10)) # or range(10) as appropriate
번갈아:
itertools.islice(itertools.imap(lambda x: x * .5, itertools.count()), 10)
# without applying the `islice`, we get an infinite stream of half-integers.
답변
사용 itertools
: 지연 평가 부동 소수점 범위 :
>>> from itertools import count, takewhile
>>> def frange(start, stop, step):
return takewhile(lambda x: x< stop, count(start, step))
>>> list(frange(0.5, 5, 1.5))
# [0.5, 2.0, 3.5]
답변
패키지 more-itertools에 numeric_range 함수를 추가하는 것을 도왔습니다 .
more_itertools.numeric_range(start, stop, step)
내장 함수 범위처럼 작동하지만 float, Decimal 및 Fraction 유형을 처리 할 수 있습니다.
>>> from more_itertools import numeric_range
>>> tuple(numeric_range(.1, 5, 1))
(0.1, 1.1, 2.1, 3.1, 4.1)