小编典典

range() 用于浮点数

all

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

阅读 99

收藏
2022-07-27

共1个答案

小编典典

~~我不知道内置函数,但是写一个像 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参数。确保使用字符串而不是浮点数对其进行初始化。

>>> 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)
,这可以正常工作。

2022-07-27