class InfiniteArray: def __init__(self, generator_function): self.generator_function = generator_function self.items = [] self.index = 0
def __getitem__(self, index):
# if the index is out of bounds, generate more items
while index >= len(self.items):
self.items.append(self.generator_function())
return self.items[index]
# example generator function that generates capital cities
def world_capital_cities():
# list of capital cities
capital_cities = ['Paris', 'London', 'Tokyo', 'New Delhi', 'Beijing']
# generate capital cities in a cyclic manner
for i in itertools.cycle(range(len(capital_cities))):
yield capital_cities[i]# create an infinite array object with the world_capital_cities generator function capital_cities_array = InfiniteArray(world_capital_cities)
# access the 10th item in the array print(capital_cities_array[10]) # prints 'New Delhi'
# example generator function that generates concatenation of two lists def soft_sweet(): # list of soft items soft = ['cloud', 'pillow', 'fluffy'] # list of sweet items sweet = ['ice cream', 'candy', 'bunny'] # generate concatenation of soft and sweet in a cyclic manner for i in itertools.cycle(range(len(soft))): yield soft[i] + ' ' + sweet[i]
# create an infinite array object with the soft_sweet generator function soft_sweet_array = InfiniteArray(soft_sweet)
# access the 5th item in the array print(soft_sweet_array[5]) # prints 'pillow candy'