如何获得浮动范围列表?

时间:2013-12-03 09:23:55

标签: python

如何获取由浮动组成的范围列表?为什么以下代码不起作用?

lons = list (range(80.0,90.0,0.05))

print (lons)

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

您可以使用生成器功能:

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])   

答案 2 :(得分:2)

来自range的Python文档:

  

参数必须是普通整数。

答案 3 :(得分:2)

range只需要唠叨。 你可以形成一个范围并乘以浮点数来得到你需要的数字,比如这个

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

请注意,对于那么多数字,最终可能会出现小的舍入“错误”。

答案 4 :(得分:1)

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

答案 5 :(得分: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)

    
  

答案 6 :(得分:1)

有人尊重曾经说过:

  

浮点没有意义。

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

但是因为在这里,这并不能完全算作答案,这里有一个可以为你效果的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))