islice
- utilitools.islice(iterable, *args)[source]
- Make an iterator that returns selected elements from an iterable.An extension of itertools.islice that supports negative values for start, stop, and step.In some cases, negative values require caching; this function minimizes the amount of memory needed.
Caution
Infinite caching can lead to memory issues.- Parameters
iterable (collections.Iterable) –
Iterable to which the slice object will be applied.args (int | None) –
Arguments to create a slice object:stop
start, stop
start, stop, step
- Returns
An iterator with the selected elements.
- Return type
- Raises
TypeError –
If iterable is not iterable.
If args is empty or contains more than three arguments.
If args values are not comparable (except NoneType).
ValueError –
If args values are not NoneType or int.
If step (from args) is equal to zero.
Examples
from itertools import count
from utilitools import islice
Slicing a finite sequence when start is negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, -15, None, 3)
>>> list(iterator)
[35, 38, 41, 44, 47]
Slicing a finite sequence when start and stop are negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, -30, -20, 3)
>>> list(iterator)
[20, 23, 26, 29]
Slicing a finite sequence when start and step are negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, -30, None, -3)
>>> list(iterator)
[20, 17, 14, 11, 8, 5, 2]
Slicing a finite sequence when start, stop and step are negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, -20, -30, -3)
>>> list(iterator)
[30, 27, 24, 21]
Slicing a finite sequence when stop is negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, None, -30, 3)
>>> list(iterator)
[0, 3, 6, 9, 12, 15, 18]
Slicing a finite sequence when stop and step are negative:
>>> iterable = range(50)
>>> iterator = islice(iterable, None, -20, -3)
>>> list(iterator)
[49, 46, 43, 40, 37, 34, 31]
Slicing an infinite sequence when step is negative:
>>> iterable = count()
>>> iterator = islice(iterable, 30, 20, -3)
>>> list(iterator)
[30, 27, 24, 21]