Duvida com index de lista e for

Eu fiz um script que eu crio uma lista com 3 caracteres, e eu quero mostrar todas as combinações possíveis a partir daquela lista, por exemplo:

lista = [2,1,0]

Imprimir na tela:

2,1,0
2,0,1
1,2,0

e assim vai…

esse é o código que eu fiz:

alfabeto_isaque = ['A', '9', '@']
aux_l2 = []

for c in range(0, len(alfabeto_isaque)):
    aux_l2 = []
    aux_l2.append(alfabeto_isaque[c])

    for i in range(0, len(alfabeto_isaque)):
        if alfabeto_isaque[i] == aux_l2[0]:
            continue
        aux_l2.append(alfabeto_isaque[i])

    print(aux_l2)
    aux_l2 = []
    aux_l2.append(alfabeto_isaque[c])
    for i in range(len(alfabeto_isaque)-1, -1, -1):
        if alfabeto_isaque[i] == aux_l2[0]:
            continue
        aux_l2.append(alfabeto_isaque[i])
    print(aux_l2)

deu certo, porém no meu segundo for, antes de colocar -1 eu coloquei 0, ai ele não imprimia na tela a letra “A”, porquê o “i” na ultima iteração ficava sempre valendo 1, e não chegava a 0, pra dar certo eu coloquei -1, ai sim o “A” apareceu.

Minha dúvida é, na minha lista eu não tenho -1, eu tenho a posição 0, 1, e 2.
Por que ele não retornou um erro de index na minha lista?

Você tá falando desse trecho aqui?

range(len(alfabeto_isaque)-1, -1, -1

A funçao range retorna um intervalo incluindo o limite inferior e excluindo o superior, ou seja:

range(1,3) # [1,2]

A sua chamada com -1, gera a lista sem índice 0, enquanto quando usa o -1, ela gera a lista como quer:

range(2, 0,-1) #  [2,1]
range(2, -1,-1) # [2,1,0]

De qualquer forma, você nao precisa dos índices para fazer isso. Você só precisa comparar os elementos em si. Tente isso:

alfabeto_isaque = ['A', '9', '@']

for index, elemento in enumerate(alfabeto_isaque):
    aux_l2 = [elemento]

    for elemento_2 in alfabeto_isaque:
        if elemento_2 == elemento:
            continue
        aux_l2.append(elemento_2)
    print(aux_l2)
    
    aux_l2 = [elemento]
    for elemento_3 in reversed(alfabeto_isaque):
        if elemento_3 == elemento:
            continue
        aux_l2.append(elemento_3)
    print(aux_l2)

Um aviso que sua soluçao só funciona para listas com 3 elementos…

1 curtida

entendi, Obrigado!