2024-04-25 23:40:02 发布
网友
有没有办法在0和1之间按0.1步进?
我以为我可以像下面这样做,但失败了:
for i in range(0, 1, 0.1): print i
相反,它说步骤参数不能为零,这是我没有预料到的。
Python的range()只能做整数,不能做浮点。在特定情况下,您可以使用列表理解代替:
[x * 0.1 for x in range(0, 10)]
(用该表达式替换对range的调用。)
对于更一般的情况,您可能需要编写自定义函数或生成器。
与其直接使用小数步,不如用你想要的点数来表达。否则,浮点舍入误差可能会给出错误的结果。
您可以使用NumPy库中的linspace函数(它不是标准库的一部分,但相对容易获得)。linspace需要返回许多点,还可以指定是否包含正确的端点:
linspace
>>> np.linspace(0,1,11) array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> np.linspace(0,1,10,endpoint=False) array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
如果您真的想使用浮点步长值,可以使用numpy.arange。
numpy.arange
>>> import numpy as np >>> np.arange(0.0, 1.0, 0.1) array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
不过,浮点舍入误差会导致问题。这里有一个简单的例子,舍入错误导致arange生成一个长度为4的数组,而它只应生成3个数字:
arange
>>> numpy.arange(1, 1.3, 0.1) array([1. , 1.1, 1.2, 1.3])
在'xrange([start], stop[, step])'的基础上,您可以定义一个生成器,它接受并生成您选择的任何类型(坚持使用支持+和<的类型):
+
<
>>> def drange(start, stop, step): ... r = start ... while r < stop: ... yield r ... r += step ... >>> i0=drange(0.0, 1.0, 0.1) >>> ["%g" % x for x in i0] ['0', '0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '1'] >>>
Python的range()只能做整数,不能做浮点。在特定情况下,您可以使用列表理解代替:
(用该表达式替换对range的调用。)
对于更一般的情况,您可能需要编写自定义函数或生成器。
与其直接使用小数步,不如用你想要的点数来表达。否则,浮点舍入误差可能会给出错误的结果。
您可以使用NumPy库中的
linspace
函数(它不是标准库的一部分,但相对容易获得)。linspace
需要返回许多点,还可以指定是否包含正确的端点:如果您真的想使用浮点步长值,可以使用
numpy.arange
。不过,浮点舍入误差会导致问题。这里有一个简单的例子,舍入错误导致
arange
生成一个长度为4的数组,而它只应生成3个数字:在'xrange([start], stop[, step])'的基础上,您可以定义一个生成器,它接受并生成您选择的任何类型(坚持使用支持
+
和<
的类型):相关问题 更多 >
编程相关推荐