I am familiar with the difference between range() and xrange(). I noticed something weird with xrange():
>>> xrange(1,10,2)
xrange(1, 11, 2)
>>> xrange(1,10,4)
xrange(1, 13, 4)
Functionally, it is correct:
>>> for item in xrange(1,10,4):
... print item
...
1
5
9
>>>
However, as you can see, the stop value in the returned xrange object is the next higher value after the last legal value. Any reason why?
range() which now provides the same functionality in Python 3 as xrange in Python 2 behaves as expected:
>>> range(1,10,4)
range(1, 10, 4)
>>> range(1,10,2)
range(1, 10, 2)
>>>