Итератор — объект, по которому можно последовательно перебирать элементы: он реализует методы __iter__() и __next__(), выдаёт по одному элементу и бросает StopIteration, когда они кончились. Генератор — частный (и самый удобный) способ создать итератор через функцию с yield или генераторное выражение. Генератор ленив: вычисляет значения по требованию и хранит в памяти только текущее состояние, а не всю коллекцию.