floating point range generator
Bengt Richter
bokr at oz.net
Mon Jul 28 15:36:21 EDT 2003
On 28 Jul 2003 11:23:03 -0700, Paul Rubin <http://phr.cx@NOSPAM.invalid> wrote:
>Carl Banks <imbosol at aerojockey.com> writes:
>> In the interests of practicality beats purity, when you're
>> interpolating (instead of stepping as in range) you should include the
>> final endpoint. In my experience, when when you divide a segment into
>> intervals, you almost always want to include both endpoints.
>
>I think you're right about this, but it goes against the Python notion
>of a "range" function, so an frange that includes both endpoints
>should be called something different, maybe "fstep" or something like
>that. For what I was doing, the frange that I posted did the job.
>
>I see now that that the problem is subtle enough that IMO, a fully
>worked out solution should be written and included in the Python
>library or at least the Python cookbook.
How about if we indicate the kind of interval, e.g.,
>>> def interiter(start, stop, n_intervals, ends='[]'):
... fn=float(n_intervals)
... for i in xrange(ends[0]=='(', n_intervals+(ends[1]==']')):
... yield ((n_intervals-i)/fn)*start + (i/fn)*stop
...
>>>
>>> for f in interiter(0, 8, 8): print f,
...
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
>>> for f in interiter(0, 8, 8, ends='[)'): print f,
...
1.0 2.0 3.0 4.0 5.0 6.0 7.0
>>> for f in interiter(0, 8, 8, ends='(]'): print f,
...
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
>>> for f in interiter(0, 8, 8, ends='()'): print f,
...
1.0 2.0 3.0 4.0 5.0 6.0 7.0
>>> for f in interiter(0, 8, 8, ends='[]'): print f,
...
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
Regards,
Bengt Richter
More information about the Python-list
mailing list