From 3eb7601bad8830707c945ea00074088dca388c3c Mon Sep 17 00:00:00 2001 From: asazernik Date: Tue, 19 Jun 2012 04:19:16 -0700 Subject: [PATCH] Slice steps refer to indices in the original sequence, not to values. (For example, if the slice step is 1 and the original xrange has _step=2, the resulting xrange should have _step=2, not 1.) --- xrange.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/xrange.py b/xrange.py index a0997a9..9c63966 100644 --- a/xrange.py +++ b/xrange.py @@ -101,19 +101,20 @@ def __getitem_slice(self, slce): """Return an xrange which represents the requested slce of the sequence represented by this xrange. """ - start, stop, step = slce.start, slce.stop, slce.step - if step == 0: + start, stop, index_step = slce.start, slce.stop, slce.step + if index_step == 0: raise ValueError('slice step cannot be 0') - + start = start or self._start stop = stop or self._stop + step = (index_step or 1) * self._step if start < 0: start = max(0, start + self._len) if stop < 0: stop = max(start, stop + self._len) - if step is None or step > 0: - return xrange(start, stop, step or 1) + if step > 0: + return xrange(start, stop, step) else: rv = reversed(self) rv._step = step