Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое итератор?
Итератор — это объект в Python, который позволяет перебирать элементы коллекции один за другим. Это фундаментальная концепция Python, которая используется везде: в циклах for, в работе с генераторами и в обработке больших данных в Data Science.
Определение итератора
Итератор — это объект, который реализует два метода:
__iter__()— возвращает сам итератор__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.