How to use a decimal range() step value?

前端 未结 30 2206
醉话见心
醉话见心 2020-11-21 22:34

Is there a way to step between 0 and 1 by 0.1?

I thought I could do it like the following, but it failed:

for i in range(0, 1, 0.1):
    print i
         


        
30条回答
  •  青春惊慌失措
    2020-11-21 23:16

    Best Solution: no rounding error

    >>> step = .1
    >>> N = 10     # number of data points
    >>> [ x / pow(step, -1) for x in range(0, N + 1) ]
    
    [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    

    Or, for a set range instead of set data points (e.g. continuous function), use:

    >>> step = .1
    >>> rnge = 1     # NOTE range = 1, i.e. span of data points
    >>> N = int(rnge / step
    >>> [ x / pow(step,-1) for x in range(0, N + 1) ]
    
    [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    

    To implement a function: replace x / pow(step, -1) with f( x / pow(step, -1) ), and define f.
    For example:

    >>> import math
    >>> def f(x):
            return math.sin(x)
    
    >>> step = .1
    >>> rnge = 1     # NOTE range = 1, i.e. span of data points
    >>> N = int(rnge / step)
    >>> [ f( x / pow(step,-1) ) for x in range(0, N + 1) ]
    
    [0.0, 0.09983341664682815, 0.19866933079506122, 0.29552020666133955, 0.3894183423086505, 
     0.479425538604203, 0.5646424733950354, 0.644217687237691, 0.7173560908995228,
     0.7833269096274834, 0.8414709848078965]
    

提交回复
热议问题