range python float_关于python:range()with float step argument

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Python decimal range() step value

我希望生成如下列表:

[0, 0.05, 0.1, 0.15 ... ]

范围(0,1,0.05)会很好,但它不工作,因为:

range() integer step argument expected, got float.

你有什么好主意吗?;

参见:stackoverflow.com/q/477486/1240268

stackoverflow.com/questions/477486/…

如果你可以使用numpy,最好使用numpy.linspace。试图在浮点数上适应range逻辑的函数,包括numpy自己的arange逻辑,通常会混淆最终边界是否出现在列表中。linspace优雅地解决了这个问题,让您明确地指定开始点、结束点和所需的元素数量:

>>> import numpy

>>> numpy.linspace(0.0, 1.0, 21)

array([ 0.  ,  0.05,  0.1 ,  0.15,  0.2 ,  0.25,  0.3 ,  0.35,  0.4 ,

0.45,  0.5 ,  0.55,  0.6 ,  0.65,  0.7 ,  0.75,  0.8 ,  0.85,

0.9 ,  0.95,  1.  ])

你赢不了:linspace可能会对有多少项目感到困惑("为什么是21而不是20?")。是的,无论如何,评论都会井然有序。

在我最初的例子未能如预期般成功之后,我将20改为21的时候,我也在想同样的事情。:)尽管如此,这种混淆比终点是否包含在范围内(以及如果不包含在范围内,如何始终包含在范围内)的混淆更不微妙,更容易发生意外。这总是一种权衡,但至少在这里,很明显你得到了你想要的——结果数组的len是21。

你总是得到你想要的。这就是编程的悲剧:)

可以指定是否应包括最后一个点。看看endpoint的论点。

在python 3中,range返回一个生成器(不可变序列)。所以我认为我们可以定义一个非常简单的函数,比如:

def frange(start,stop, step=1.0):

while start < stop:

yield start

start +=step

所以:

for x in frange(0, 1, 0.05):

print(x)

Python不需要太狡猾。

如果您需要列表,只需致电:

list(frange(0,1,0.05))

或者更改函数以立即返回列表。

您可以使用一行解决方案来进行乘法运算或其他运算,但使用不同的起始值和结束值可能会很困难。如果经常使用这种范围,只需使用该函数并重用它。即使在代码上重复多次的一行程序也很糟糕。

这有点学究,但range()返回了一个列表。xrange()返回一个生成器。

不在python 3中。range返回生成器(不可变序列),xrange不再存在。我会修复打印,使其清楚地表明它是python 3。

或者这个怎么样:

[v*0.05 for v in range(0,int(1/0.05))]

你可能会冒险"刮掉"最后一个元素。我认为在理解上做划分更清楚。另一方面,您的方法允许选择是显式使用舍入还是截断进行范围计算,因此在某些情况下可能更好。

另外,你也可以自己计算,我只是想证明一条线是可能的。

是的,这就是为什么我+1得到了你的解决方案。但我自己做数学比较舒服,可能会在评论中解释。

@伊万科布利克,我正试图做同样的事情,但我不想生成一个列表。您将如何调整为range()中c类型的for循环所做的工作?

怎么了?

[i/100.0 for i in range(0, 100, 5)]

?你检查你想要多少个数字(这里是两个),然后拿出一个合适的乘数(1变为100,0.05变为5)。

这个怎么样:

temp = range(0,100,5) # 0,5,10,...,95

final_list = map(lambda x: x/100.0,temp) # becomes 0,0.05,0.10,...,0.95

它不太优雅,但我从来没有费心做一个合适的功能。而且,它只在步骤大小是合理的情况下工作。优点是它足够快,可以当场完成。

有关更通用和更优雅的解决方案,请参阅对您的操作的注释。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值