все Python 3Итераторы и генераторыпонятие
itertools.islice
itertools
Срез итератора без материализации. Аналог slice для итерируемых.
Синтаксис
from itertools import islice
islice(iterable, stop)
islice(iterable, start, stop[, step])
islice не возвращается назад: отрицательные start, stop и step запрещены, шаг только положительный. И он реально расходует итератор — элементы до start прочитаны и выброшены, а после вызова исходный итератор стоит на месте, докуда дошёл срез, так что повторный islice продолжит, а не начнёт заново.
Примеры
from itertools import islice
print(list(islice(range(100), 5))) # → [0,1,2,3,4]
print(list(islice(range(100), 2, 7))) # → [2,3,4,5,6]
print(list(islice(range(100), 0, 10, 2))) # → [0,2,4,6,8]
from itertools import islice
# islice с бесконечным генератором
def naturals():
n = 0
while True:
yield n
n += 1
print(list(islice(naturals(), 5, 10))) # → [5, 6, 7, 8, 9]
# Пагинация: страница 3 по 10
print(list(islice(range(100), 20, 30))) # → [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
# Каждый третий элемент
print(list(islice(range(20), 0, None, 3))) # → [0, 3, 6, 9, 12, 15, 18]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности