2017年8月3日 星期四

[ Python 常見問題 ] range() for floats

Source From Here 
Question 
Is there a range() equivalent for floats in Python? 
>>> range(0.5, 5, 1.5) 
[0.5, 2, 3.5, ...]

How-To 
Writing one like this shouldn't be too complicated: 
  1. def frange(x, y, jump):  
  2.   while x < y:  
  3.     yield x  
  4.     x += jump  
For example: 
>>> list(frange(0.5, 5, 1.5)) 
[0.5, 2.0, 3.5]

As the comments mention, this could produce unpredictable results like: 
>>> list(frange(0, 100, 0.1))[-1] 
99.9999999999986

You can use decimal.Decimal as the jump argument. Make sure to initialize it with a string rather than a float: 
>>> list(frange(0, 100, decimal.Decimal('0.1')))[-1] 
Decimal('99.9')

Or even: 
  1. import decimal  
  2.   
  3. def drange(x, y, jump):  
  4.   while x < y:  
  5.     yield float(x)  
  6.     x += decimal.Decimal(jump)  

And then: 
>>> list(drange(0, 100, '0.1'))[-1] 
99.9


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...