Я знаком с разницей между range() и xrange(). Я заметил что-то странное с xrange():
>>> xrange(1,10,2)
xrange(1, 11, 2)
>>> xrange(1,10,4)
xrange(1, 13, 4)
Функционально это правильно:
>>> for item in xrange(1,10,4):
... print item
...
1
5
9
>>>
Однако, как вы можете видеть, значение стопа в возвращаемом объекте xrange является следующим более высоким значением после последнего юридического значения. Любая причина, по которой?
range(), который теперь предоставляет ту же функциональность в Python 3, что и xrange в Python 2 ведет себя как ожидалось:
>>> range(1,10,4)
range(1, 10, 4)
>>> range(1,10,2)
range(1, 10, 2)
>>>