Для больших списков наиболее эффективным будет использование комбинации deque и генератора :
>>> import collections.deque
>>> def list_cycler_gen(lst):
q = collections.deque(lst,len(lst))
while True:
q.appendleft(q.pop())
yield list(q)
>>> gen = list_cycler_gen([[0],[1],[2]])
>>> gen.next()
[[2], [0], [1]]
>>> gen.next()
[[1], [2], [0]]
>>> gen.next()
[[0], [1], [2]]
Это будет работать с любым содержимым списка,Кроме того, если вы хотите выполнить цикл в другом направлении, вы можете заменить первую строку цикла на:
q.append(q.popleft())