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

Что такое итератор?

1.0 Junior🔥 201 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое итератор?

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

Определение итератора

Итератор — это объект, который реализует два метода:

  1. __iter__() — возвращает сам итератор
  2. __next__() — возвращает следующий элемент; когда элементов больше нет, выбрасывает исключение StopIteration
# Пример: простой итератор
class MyIterator:
    def __init__(self, max_value):
        self.current = 0
        self.max_value = max_value
    
    def __iter__(self):
        return self  # Возвращаем сам объект
    
    def __next__(self):
        if self.current < self.max_value:
            self.current += 1
            return self.current - 1
        else:
            raise StopIteration  # Конец итерации

# Использование
my_iter = MyIterator(3)
for num in my_iter:
    print(num)  # Выведет: 0, 1, 2

Разница между итератором и итерируемым объектом

Итерируемый объект (iterable) — это объект, который реализует метод __iter__(). Он может быть преобразован в итератор.

# Итерируемый объект (список)
my_list = [1, 2, 3]
print(hasattr(my_list, '__iter__'))  # True

# Получение итератора из итерируемого объекта
my_iterator = iter(my_list)
print(type(my_iterator))  # <class 'list_iterator'>

# Использование __next__()
print(next(my_iterator))  # 1
print(next(my_iterator))  # 2
print(next(my_iterator))  # 3
# next(my_iterator)  # Выбросит StopIteration

Где используются итераторы

В циклах for:

# Цикл for работает с итераторами "под капотом"
for element in [1, 2, 3]:
    print(element)

# Эквивалент:
iterator = iter([1, 2, 3])
while True:
    try:
        element = next(iterator)
        print(element)
    except StopIteration:
        break

Генераторы — это итераторы

Генератор — это удобный способ создания итераторов с помощью функции и yield:

# Генератор — это итератор
def my_generator(max_value):
    current = 0
    while current < max_value:
        yield current
        current += 1

# Использование
for num in my_generator(3):
    print(num)  # 0, 1, 2

# Генератор — это итератор
gen = my_generator(5)
print(next(gen))  # 0
print(next(gen))  # 1

Практический пример: чтение больших файлов

Итераторы критичны для работы с большими данными в Data Science:

# Читаем большой файл построчно без загрузки в память
def read_large_file(file_path, chunk_size=1000):
    with open(file_path, 'r') as f:
        while True:
            lines = [f.readline() for _ in range(chunk_size)]
            if not lines[0]:  # Конец файла
                break
            yield lines

# Использование
for lines_batch in read_large_file('large_file.txt'):
    process_batch(lines_batch)  # Обрабатываем порции

Итераторы в pandas и NumPy

import pandas as pd
import numpy as np

# Итератор по строкам DataFrame
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

# Итерируем по строкам
for index, row in df.iterrows():
    print(index, row.values)

# NumPy flat — итератор по всем элементам массива
arr = np.array([[1, 2], [3, 4]])
for element in arr.flat:
    print(element)  # 1, 2, 3, 4

Встроенные функции для работы с итераторами

# map() — применяет функцию к каждому элементу
numbers = [1, 2, 3, 4]
doubled = map(lambda x: x * 2, numbers)
print(list(doubled))  # [2, 4, 6, 8]

# filter() — фильтрует элементы
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens))  # [2, 4]

# zip() — объединяет несколько итерируемых объектов
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for num, letter in zip(list1, list2):
    print(num, letter)  # 1 a, 2 b, 3 c

Преимущества итераторов в Data Science

  • Экономия памяти: Не нужно загружать всё в память сразу
  • Ленивые вычисления: Вычисления происходят по мере необходимости
  • Работа с потоками данных: Можно обрабатывать бесконечные потоки
  • Эффективность: Подходят для больших датасетов

Итераторы — это основа для эффективной работы с данными в Python.