关于python:如何获取浮动组成的范围列表?

How to get list of the range consisting of floats?

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

如何得到由浮点数组成的范围列表?为什么下面的代码不起作用?

1
2
3
lons = list (range(80.0,90.0,0.05))

print (lons)

如果您不想编写自己的函数,可以使用takewhile和count(从2.7开始)的组合,例如:

1
2
from itertools import takewhile, count
my_range = list(takewhile(lambda L: L < 90, count(80, 0.05)))


You can use a generator function:

ZZU1〔3〕

Or using NumPy号:

1
2
3
4
5
>>> 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只取整数。您可以形成一个范围,然后用浮点数乘以它们,得到您需要的数字,如下所示

1
lons = [80+x*0.05 for x in range(0,200)]

请注意,您可能最终会遇到许多数字的小舍入"错误"。


从用于range的python文档中:

The arguments must be plain integers.


我尊敬的人曾经说过:

There's no point in floating point.

所以你的问题的实际答案是:你做错了:)

但这并不能算是答案,所以,这里有一个疯狂的功能,可以为你工作。它将所有内容提升为整数,并生成所需的浮点数。

正如您可能从代码中看到的那样,decpl代表"小数点",并定义浮点参数的解析。我不认为有一种简单的方法可以可靠地从传递给step参数的值中得出这一点。(欢迎评论)

1
2
3
4
5
6
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))


您可以创建自己的范围函数来管理浮动。

def n_range(x, y, jump):
... while x < y: ... yield x ... x += jump ... lons = list (n_range(80.0,90.0,0.05))

print (lons)


range只适用于整数。请参阅http://docs.python.org/2/library/functions.html range上的文档。

您需要的功能是:

1
2
3
4
5
def floatrange(min_val, max_val, step):
    val=min_val
    while val < max_val:
        yield val
        val += step