我想生成列表是這樣的:
[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 –