Создание срезов из итератора с использованием itertools.islice()

Опубликован: 28.02.2024 90

Использование функции itertools.islice() встроенного модуля itertools представляет собой мощный и эффективный инструмент для извлечения сегментов данных из итераторов в Python.

Стандартный метод slice(), применяемый к спискам, кортежам, строкам, создает копию исходной последовательности и __занимает значительный объем памяти __компьютера, особенно при работе с большими данными.

В отличие от slice(), функция itertools.islice() возвращает итератор, что происходит быстрее и позволяет извлекать элементы по мере их запрашивания без загрузки в память всего объема данных исходной последовательности.

Синтаксис: itertools.islice(iterable, start, stop [, step])

  • iterable - исходный итератор (список, кортеж, строка и т.д.), из которого нужно извлечь срез;
  • start - начальная точка среза (индекс первого элемента);
  • stop - конечная точка среза (не включая этот индекс), если не указана или равна None, то срез продолжается до конца итератора;
  • step - шаг, с которым нужно извлекать элементы (по умолчанию 1).

Примеры использования itertools.islice():

import itertools

# Получение среза с 1 по 5 элемент
ite = itertools.islice(range(10), 1, 6)
for item in ite:
    print(f"{item}", end=' ')
1 2 3 4 5

# Использование шага
ite = itertools.islice(range(10), 1, 9, 3)
for item in ite:
    print(f"{item}", end=' ')
1 4 7

# Итератор среза можно быстро преобразовать в список, 
# используя list() или оператор распаковки *
sliced = itertools.islice(range(50), 5, None, 3)
sliced_list = list(sliced)
print(sliced_list)
[5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47]

sliced = itertools.islice(range(50), 5, None, 3)
sliced_list = [*sliced]
print(sliced_list)
[5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47]

# Получение только первых 5 строк большого файла логов
import itertools

with open('test.log', 'r') as f:
    header = itertools.islice(f, 5)
    for line in header:
        print(line, end="")

Line 1
Line 2
Line 3
Line 4
Line 5

Похожие посты

Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()

Пропуск не нужных элементов последовательности с помощью itertools.dropwhile()

Возвращение элементов списка пока условие истинно с помощью itertools.takewhile()

Бесконечные итераторы в Python itertools.count(), cycle(), repeat()

Комментариев нет.