Python Glossary English

все 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Сообщить о неточности