“A generator and a list used like a cache.”
class GeneratorList(object):
def __init__(self, generator):
self.__generator = generator
self.__list = []
def __getitem__(self, index):
for _ in range(index - len(self.__list) + 1):
self.__list.append(self.__generator.next())
return self.__list[index]