Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: generator, iterator

Почему к генератору нельзя обратиться по индексу?

Вопрос проверяет понимание различий между последовательностями и генераторами.

Короткий ответ

Генератор не хранит все элементы в памяти, он вычисляет их по одному. У него нет структуры данных, где можно взять элемент по позиции. Поэтому операции вроде gen[3] не поддерживаются. Чтобы получить элементы, нужно последовательно итерироваться.

Длинный ответ

Генераторы устроены иначе, чем списки или кортежи.

Определение: Генератор — это итератор, который вычисляет значения “на лету” (lazy evaluation), а не хранит их заранее.

Почему нет индексации

  1. Нет хранения элементов
    Список:

lst = [x * 2 for x in range(10)]
print(lst[3])  # элемент уже в памяти

Генератор:

gen = (x * 2 for x in range(10))
# gen[3]  -> TypeError
  1. Значения могут ещё не существовать
    Генератор может вычислять значения только при запросе, и заранее их просто нет.

  2. Генератор одноразовый
    Если пройти несколько элементов, они “потреблены” и назад вернуться нельзя без создания нового генератора.

Как получить N-й элемент

Если нужно взять элемент по позиции, обычно делают:

from itertools import islice

gen = (x * 2 for x in range(100))
value = next(islice(gen, 5, None))  # шестой элемент

Когда использовать генераторы

  • большие последовательности;

  • потоковые данные;

  • ситуации, где важна экономия памяти.

Вывод

К генератору нельзя обращаться по индексу, потому что он не хранит элементы и не поддерживает произвольный доступ — только последовательную итерацию.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Python

    Python

Ключевые слова

#generator

#iterator

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.