Q:

Como navegar por uma lista em Python a cada chamada de uma função?

Tenho esse código como exemplo:
#         0   1   2   3   4
lista = ['1','2','3','4','5']

def nexxt():
    for item in range(len(lista)):
        item += 1       
        print(lista[item])

def back():
    for item in range(len(lista)):
        item -= 1
        print(lista[item])

Quero imprimir cada objeto a cada chamada...Tipo eu chamo nexxt ele imprime 1 pois o 0 ja foi, chamo novamente e ele imprime 2 e assim vai...e com o back o contrário...quero adaptar isso a um projeto onde posso pular e voltar musicas onde na lista tera o nome de cada .mp3 e o pygame/ mixer faz o resto
Esse código não é util, pq ele não retorna corretamente de 0 a 4...se alguém puder me dar uma luz

A:

Há muitas formas de fazer o que está querendo e uma delas, é criando uma variável auxiliar para saber o índice atual da lista, funcionando como um ponteiro que marca onde você parou na lista. 
Dentro das suas funções nexxt e back não deve existir o laço repetição for já que você não quer percorrer a sua lista a cada chamada. O que você precisa fazer, é apenas incrementar ou decrementar o valor da variável auxiliar para que o ponteiro seja alterado a cada chamada.
Veja o exemplo abaixo:
songs = ["Run Away (Moldova).mp3", "Real Gone.mp3", "Sun shine it.mp3", "MADKID - Rise.mp3"]
pointer = 0

def play_song():
    global pointer
    print("Playing " + songs[pointer])

def next_song():
    global pointer
    if pointer < len(songs) - 1: pointer += 1

def back_song():
    global pointer
    if pointer > 0: pointer -= 1

