Опубликован: 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()
Комментариев нет.