Obtendo o próximo elemento ao percorrer uma lista

li = [0, 1, 2, 3]

running = True
while running:
    for elem in li:
        thiselem = elem
        nextelem = li[li.index(elem)+1]

Quando isso atinge o último elemento, umIndexError é gerado (como é o caso de qualquer lista, tupla, dicionário ou string que é iterada). Na verdade, eu quero naquele momento paranextelem igualarli[0]. Minha solução bastante complicada para isso foi

while running:
    for elem in li:
        thiselem = elem
        nextelem = li[li.index(elem)-len(li)+1]   # negative index

Existe um jeito melhor de fazer isso?

questionAnswers(8)

yourAnswerToTheQuestion