为了账号安全,请及时绑定邮箱和手机立即绑定

浮点数的range()

浮点数的range()

智慧大石 2019-12-12 09:10:46
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
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我曾经使用过,numpy.arange但是由于浮点错误,控制返回的元素数量有些复杂。所以现在我使用linspace,例如:


>>> import numpy

>>> numpy.linspace(0, 10, num=4)

array([  0.        ,   3.33333333,   6.66666667,  10.        ])



查看完整回答
反对 回复 2019-12-13
?
冉冉说

TA贡献1877条经验 获得超1个赞

我不知道一个内置的功能,但是写一个像这样应该不会太复杂。


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



查看完整回答
反对 回复 2019-12-13
?
慕森卡

TA贡献1806条经验 获得超8个赞

您可以使用:


[x / 10.0 for x in range(5, 50, 15)]

或使用lambda / map:


map(lambda x: x/10.0, range(5, 50, 15))



查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信