On 2007-10-02, Hrvoje Niksic <[EMAIL PROTECTED]> wrote: > Antoon Pardon <[EMAIL PROTECTED]> writes: > >> It may be convincing if you only consider natural numbers in >> ascending order. Suppose you have the sequence a .. b and you want >> the reverse. If you work with included bounds the reverse is just b >> .. a. If you use the python convention, things become more >> complicated. > > It's a tradeoff. The convention used by Python (and Lisp, Java and > others) is more convenient for other things. Length of the sequence > x[a:b] is simply b-a. Empty sequence is denoted simply with x[a:a], > where you would need to use the weird x[a:a-1] with inclusive bounds. > Subsequences such as x[a:b] and x[b:c] merge smoothly into x[a:c], > making it natural to iterate over subsequences without visiting an > element twice.
Sure it is a tradeoff and the python choice may in the end still turn out the best. But that doesn't contradict that a number of considerations were simply not mentioned in the article refered to. >> Another problem is if you are working with floats. Suppose you have >> a set of floats. Now you want the subset of numbers that are between >> a and b included. If you want to follow the convention that means >> you have to find the smallest float that is bigger than b, not a >> trivial task. > > The exact same argument can be used against the other convention: if > you are working with inclusive bounds, and you need to represent the > subset [a, b), you need to find the largest float that is smaller than > b. Which I think is a good argument against using any convention and having explict conditions for the boundaries to include or exclude them. So instead of writing xrange(2,6) you have to write something like xrange(2 <= x < 6) which explictly states 2 is included and 6 is excluded. If someone wants both boundaries include he can write xrange(2 <= x <= 5). A slice notation that would somehow indicate which boundaries are included and which are excluded would be usefull IMO. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list