def islice(self, start=None, stop=None, reverse=False):
_len = self._len<EOL>if not _len:<EOL><INDENT>return iter(())<EOL><DEDENT>start, stop, _ = slice(start, stop).indices(self._len)<EOL>if start >= stop:<EOL><INDENT>return iter(())<EOL><DEDENT>_pos = self._pos<EOL>min_pos, min_idx = _pos(start)<EOL>if stop == _len:<EOL><INDENT>max_pos = len(self._lists) - <NUM_LIT:1><EOL>max_idx = len(self._lists[-<NUM_LIT:1>])<EOL><DEDENT>else:<EOL><INDENT>max_pos, max_idx = _pos(stop)<EOL><DEDENT>return self._islice(min_pos, min_idx, max_pos, max_idx, reverse)<EOL>
Returns an iterator that slices `self` from `start` to `stop` index,
inclusive and exclusive respectively.

When `reverse` is `True`, values are yielded from the iterator in
reverse order.

Both `start` and `stop` default to `None` which is automatically
inclusive of the beginning and end.