# list – Circular array indices in Python

## list – Circular array indices in Python

You can use modulo operator, like this

``````print a[3 % len(a)]
``````

If you dont want to use modulo operator like this, you need to subclass `list` and implement `__getitem__`, yourself.

``````class CustomList(list):
def __getitem__(self, index):
return super(CustomList, self).__getitem__(index % len(self))

a = CustomList([1, 2, 3])
for index in xrange(5):
print index, a[index]
``````

Output

``````0 1
1 2
2 3
3 1
4 2
``````

If you want to do the same with Numpy Arrays, you can do like this

``````import numpy as np

class CustomArray(np.ndarray):
def __new__(cls, *args, **kwargs):
return np.asarray(args).view(cls)

def __getitem__(self, index):
return np.ndarray.__getitem__(self, index % len(self))

a = CustomArray([1, 2, 3])
for index in xrange(5):
print a[index]
``````

Having such functionality is not good for your code. Instead write a generator function which generates you round robin values.

``````numbers = [1, 2, 3]

def returnNumber():

A circular array for yielding list members repeatedly

index = -1
while True:
index += 1
yield slangWords[index % len(numbers)]

# Now you can use this generator
numberGenerator = returnNumber()
numberGenerator.next() # returns 1
numberGenerator.next() # returns 2
numberGenerator.next() # returns 3
numberGenerator.next() # returns 1
numberGenerator.next() # returns 2
``````

#### list – Circular array indices in Python

You can very simply:

``````mainArr = [5,2,1,4,2]
def getRangeArray(startIndexInMainArray):
s = mainArr[startIndexInMainArray::]
b=len(mainArr)-len(s)
return (s+mainArr[0:b])

print(mainArr)
print(getRangeArray(4)) # What is the first index?

#for index 4
#[5, 2, 1, 4, 2]  before
#[2, 5, 2, 1, 4]  after

#for index 2
#[5, 2, 1, 4, 2]  before
#[1, 4, 2, 5, 2]  after

#for index 0
#[5, 2, 1, 4, 2]  before
#[5, 2, 1, 4, 2]  after
``````