我想生成列表是这样的:
[0, 0.05, 0.1, 0.15 ... ]
范围(0,1, 0.05)会很好,但它不起作用:
range()整数步参数预计,得到浮动。
你有什么优雅的想法吗? ;)
我想生成列表是这样的:
[0, 0.05, 0.1, 0.15 ... ]
范围(0,1, 0.05)会很好,但它不起作用:
range()整数步参数预计,得到浮动。
你有什么优雅的想法吗? ;)
如何:
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的意见,以获得更一般和更优雅的解决方案。
这有什么错
[i/100.0 for i in range(0, 100, 5)]
?你可以检查你想要的数字(这里是两个),并选出一个合适的乘数(1变成100,0.05变成5)。
如果您可以使用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. ])
你不能赢:'linspace'可能会让人困惑*有多少物品*(“为什么21而不是20?”)。无论如何,评论总是有序的。 – LSerni
在我最初的例子没有像预期的那样工作之后,当我将'20'更改为'21'时,我正在考虑完全相同的事情。 :)尽管如此,这种混淆与其说是混淆了终点是否包含在范围内(以及如果不包含在范围内总是如此),这种混淆并不那么微妙,并且容易出现意外。这总是一种折衷,但至少在这里很明显,你得到了你所要求的 - 结果数组*的“len”是* 21. – user4815162342
你*总是*得到你所要求的。这是编程的悲剧:) – LSerni
在Python 3,范围返回一个发电机(不可变的序列)...所以我想我们可以定义一个很简单的功能,如:
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))
或更改函数返回一个列表的时候了。
您可以使用一行解决方案来实现乘法或其他操作,但对于不同的起始值和结束值可能会非常棘手。如果您经常使用这种范围,只需使用该功能并重新使用即可。甚至在代码上多次重复一行也很糟糕。
请参阅:http://stackoverflow.com/q/477486/1240268 –
http://stackoverflow.com/questions/477486/python-decimal-range-step-value –