← Назад ко всем вопросам

Примеры итераторов

1️⃣ Как кратко ответить

Итераторы в Python — это объекты, которые реализуют метод __iter__() и __next__(). Они позволяют последовательно проходить по элементам коллекции, не загружая всю коллекцию в память. Примеры итераторов включают объекты, возвращаемые функцией iter(), генераторы, а также встроенные функции, такие как map(), filter(), и zip().

2️⃣ Подробное объяснение темы

Итераторы — это фундаментальная концепция в Python, которая позволяет работать с последовательностями данных, такими как списки, кортежи и строки, без необходимости загружать всю коллекцию в память. Это особенно полезно при работе с большими объемами данных.

Как работают итераторы

Итератор — это объект, который поддерживает протокол итерации. Он должен реализовывать два метода:

  • __iter__(): возвращает сам итератор. Это позволяет объекту быть итерируемым.
  • __next__(): возвращает следующий элемент из последовательности. Если элементов больше нет, он должен вызывать исключение StopIteration.

Пример создания итератора

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0
​
    def __iter__(self):
        return self
​
    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration
​
# Создаем объект итератора
my_iter = MyIterator([1, 2, 3])
​
# Используем итератор
for item in my_iter:
    print(item)
  • class MyIterator: определяет класс итератора.
  • __init__(self, data): инициализирует объект итератора с данными и начальным индексом.
  • __iter__(self): возвращает сам объект итератора.
  • __next__(self): возвращает следующий элемент из data или вызывает StopIteration, если элементы закончились.
  • my_iter = MyIterator([1, 2, 3]): создает экземпляр итератора с данными [1, 2, 3].
  • for item in my_iter: итерируется по объекту my_iter, выводя каждый элемент.

Примеры встроенных итераторов

  1. Функция iter(): Преобразует итерируемый объект в итератор.
my_list = [1, 2, 3]
my_iter = iter(my_list)
​
print(next(my_iter))  # 1
print(next(my_iter))  # 2
print(next(my_iter))  # 3
  • iter(my_list): создает итератор из списка my_list.
  • next(my_iter): возвращает следующий элемент из итератора.
  1. Генераторы: Специальные функции, которые упрощают создание итераторов. Они используют ключевое слово yield.
def my_generator():
    yield 1
    yield 2
    yield 3
​
for value in my_generator():
    print(value)
  • def my_generator(): определяет генератор.
  • yield: возвращает значение и сохраняет состояние функции для последующего вызова.
  • for value in my_generator(): итерируется по значениям, возвращаемым генератором.
  1. Функции map(), filter(), zip(): Возвращают итераторы.
# map example
squared = map(lambda x: x**2, [1, 2, 3])
print(list(squared))  # [1, 4, 9]
​
# filter example
evens = filter(lambda x: x % 2 == 0, [1, 2, 3, 4])
print(list(evens))  # [2, 4]
​
# zip example
zipped = zip([1, 2, 3], ['a', 'b', 'c'])
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]
  • map(): применяет функцию к каждому элементу итерируемого объекта.
  • filter(): фильтрует элементы, оставляя только те, для которых функция возвращает True.
  • zip(): объединяет несколько итерируемых объектов в кортежи.

Тема: Python
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки