我想生成这样的列表:
[0, 0.05, 0.1, 0.15 ... ]
范围(0,1,0.05)会很棒但是它不起作用:
range()整数步长参数,浮动。
你有什么优雅的想法吗? ;)
答案 0 :(得分:6)
如果你可以使用numpy,最好使用numpy.linspace
。尝试在浮点数上包含range
逻辑的函数,包括numpy自己的arange
,通常会对结束边界是否在列表中结束感到困惑。 linspace
通过明确指定起点,终点和所需的元素数量,优雅地解决了这个问题:
>>> import numpy
>>> numpy.linspace(0.0, 1.0, 21)
array([ 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 ,
0.45, 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85,
0.9 , 0.95, 1. ])
答案 1 :(得分:5)
在Python 3中,range返回一个生成器(不可变序列)...所以我认为我们可以定义一个非常简单的函数,如:
def frange(start,stop, step=1.0):
while start < stop:
yield start
start +=step
所以:
for x in frange(0, 1, 0.05):
print(x)
Python不需要太棘手。
如果您想要列表,请致电:
list(frange(0,1,0.05))
或者更改功能以立即返回列表。
你可以使用一行乘法或做其他东西的解决方案,但是使用不同的起始值和结束值可能会很棘手。如果经常使用这种范围,只需使用该功能并重复使用即可。即使是在代码上重复多次的单行也很糟糕。
答案 2 :(得分:3)
或者这个怎么样:
[v*0.05 for v in range(0,int(1/0.05))]
答案 3 :(得分:1)
这个怎么样:
temp = range(0,100,5) # 0,5,10,...,95
final_list = map(lambda x: x/100.0,temp) # becomes 0,0.05,0.10,...,0.95
它不是很优雅,但我从来没有费心去做一个正常的功能。此外,它仅在步长合理时才有效。优点是它足够快,可以在现场完成。
请向您的OP查看评论,以获得更通用,更优雅的解决方案。
答案 4 :(得分:1)
有什么问题
[i/100.0 for i in range(0, 100, 5)]
?你可以检查你想要多少位数(这里是两位数)并输出一个合适的乘数(1变为100,0.05变为5)。