如何获取由浮动组成的范围列表?为什么以下代码不起作用?
lons = list (range(80.0,90.0,0.05))
print (lons)
答案 0 :(得分:7)
如果您不想编写自己的函数,可以使用takewhile和count(从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))