猿问

浮点数的range()

range()Python中的浮点数是否等效?


>>> 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


智慧大石
浏览 338回答 3
3回答

陪伴而非守候

我曾经使用过,numpy.arange但是由于浮点错误,控制返回的元素数量有些复杂。所以现在我使用linspace,例如:>>> import numpy>>> numpy.linspace(0, 10, num=4)array([&nbsp; 0.&nbsp; &nbsp; &nbsp; &nbsp; ,&nbsp; &nbsp;3.33333333,&nbsp; &nbsp;6.66666667,&nbsp; 10.&nbsp; &nbsp; &nbsp; &nbsp; ])

冉冉说

我不知道一个内置的功能,但是写一个像这样应该不会太复杂。def frange(x, y, jump):&nbsp; while x < y:&nbsp; &nbsp; yield x&nbsp; &nbsp; x += jump如评论所述,这可能会产生不可预测的结果,例如:>>> list(frange(0, 100, 0.1))[-1]99.9999999999986为了获得预期的结果,您可以使用此问题中的其他答案之一,或者如@Tadhg所述,可以将其decimal.Decimal用作jump参数。确保使用字符串而不是浮点数对其进行初始化。>>> import decimal>>> list(frange(0, 100, decimal.Decimal('0.1')))[-1]Decimal('99.9')甚至:import decimaldef drange(x, y, jump):&nbsp; while x < y:&nbsp; &nbsp; yield float(x)&nbsp; &nbsp; x += decimal.Decimal(jump)接着:>>> list(drange(0, 100, '0.1'))[-1]99.9

慕森卡

您可以使用:[x / 10.0 for x in range(5, 50, 15)]或使用lambda / map:map(lambda x: x/10.0, range(5, 50, 15))
随时随地看视频慕课网APP

相关分类

Python
我要回答