【发布时间】:2013-12-19 06:40:40
【问题描述】:
如何获取由浮点数组成的范围列表?为什么下面的代码不起作用?
lons = list (range(80.0,90.0,0.05))
print (lons)
【问题讨论】:
标签: python
如何获取由浮点数组成的范围列表?为什么下面的代码不起作用?
lons = list (range(80.0,90.0,0.05))
print (lons)
【问题讨论】:
标签: python
【讨论】:
count 中使用浮点值。
+'d......时,放任何能给出合理结果的东西......例如decimal.Decimal - 问题是如何获得一系列浮动 - 这个规定...结果是否最终可取是另一回事:)
您可以使用生成器函数:
from math import ceil
def solve(start, end, step):
#http://stackoverflow.com/a/10986098/846892
for i in xrange(int(ceil((end-start)/step))):
yield start + step*i
print list(solve(80.0, 90.0, 0.5))
#[80.0, 80.5, 81.0, 81.5, 82.0, 82.5, 83.0, 83.5, 84.0, 84.5, 85.0, 85.5, 86.0, 86.5, 87.0, 87.5, 88.0, 88.5, 89.0, 89.5]
或者使用NumPy:
>>> import numpy as np
>>> np.arange(80., 90., .5)
array([ 80. , 80.5, 81. , 81.5, 82. , 82.5, 83. , 83.5, 84. ,
84.5, 85. , 85.5, 86. , 86.5, 87. , 87.5, 88. , 88.5,
89. , 89.5])
【讨论】:
来自range 的 Python 文档:
参数必须是纯整数。
【讨论】:
range 只需要整数。
您可以形成一个范围并将它们乘以浮点数以获得您需要的数字,就像这样
lons = [80+x*0.05 for x in range(0,200)]
请注意,对于这么多数字,您最终可能会出现小的舍入“错误”。
【讨论】:
range 仅适用于整数。请参阅http://docs.python.org/2/library/functions.html#range的文档
您正在寻找的功能是:
def floatrange(min_val, max_val, step):
val=min_val
while val < max_val:
yield val
val += step
【讨论】:
您可以创建自己的范围函数来管理浮动。
def n_range(x, y, jump):
... 而 x ... 产量 x
... x += 跳跃
...
lons = list (n_range(80.0,90.0,0.05))打印(lons)
【讨论】:
我尊敬的人曾经说过:
浮点数没有意义。
所以你的问题的实际答案是:你做错了:)
但由于这不能完全算作 SO 上的答案,所以这里有一个可以为您工作的 frange 函数。它将所有内容提升为整数并产生您想要的浮点数。
您可能从代码中可以看出,decpl 代表“小数位”并定义浮点参数的分辨率。我认为没有一种简单的方法可以可靠地从传递给 step 参数的值中得出该值。 (欢迎评论)
def frange(start, stop, step, decpl):
exp = 10.0 ** decpl
for i in xrange(int(start * exp), int(stop*exp), int(step*exp)):
yield i / exp
print list(frange(80, 90, 0.1, 1))
【讨论】: