range()Python中的浮点数是否有等价物?
range()
>>> 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
~~我不知道内置函数,但是写一个像 this这样的函数应该不会太复杂。
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参数。确保使用字符串而不是浮点数对其进行初始化。
decimal.Decimal
jump
>>> 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
[编辑不是:如果您只使用正jump整数开始和停止 ( xand y) ,这可以正常工作。
x
y