38 - Indices negativos en listas, tuplas y cadenas de caracteres

Hemos visto que para acceder a un elemento de una lista, tupla o cadena de caracteres debemos indicar mediante un subíndice que comienza a numerarse a partir de cero.

También hemos visto el concepto anterior que podemos generar otra lista, tupla o cadena de caracteres indicando una porción con el caracter ":"

Ahora veremos que podemos utilizar un valor negativo para acceder a un elemento de la estructura de datos.

Programa: ejercicio175.py

Ver video

lista1=[0,1,2,3,4,5,6]
print(lista1[-1]) # 6
print(lista1[-2]) # 5

En Python podemos acceder fácilmente al último elemento de la secuencia indicando un subíndice -1:

print(lista1[-1]) # 6

Luego el anteúltimo se accede con la sintaxis:

print(lista1[-2]) # 5

Problema 1:

Confeccionar una función que reciba una palabra y verifique si es capicúa (es decir que se lee igual de izquierda a derecha que de derecha a izquierda)

Programa: ejercicio176.py

Ver video

def capicua(cadena):
    indice=-1
    iguales=0
    for x in range(0,len(cadena)//2):
        if cadena[x]==cadena[indice]:
            iguales=iguales+1
        indice=indice-1
    print(cadena)
    if iguales==(len(cadena)//2):
        print("Es capicua")
    else:
        print("No es capicua")
    

# bloque principal

capicua("neuquen")
capicua("casa")

Disponemos un contador que comience en -1 llamado indice y otro contador para las coincidencias:

def capicua(cadena):
    indice=-1
    iguales=0

Un for que se repita tantas veces como caracteres tenga la palabra dividido 2:

    for x in range(0,len(cadena)//2):

Dentro del for verificamos si el caracter del principio de lista coincide con el caracter del fin de la lista, si es así incrementamos el contador de coincidencias:

        if cadena[x]==cadena[indice]:
            iguales=iguales+1
        indice=indice-1

Cuando sale del for si la cantidad de coincidencias es igual a la mitad de la cadena luego podemos inferir que la palabra es capicúa:

    if iguales==(len(cadena)//2):
        print("Es capicua")
    else:
        print("No es capicua")

Problemas propuestos

  • Cargar una cadena de caracteres por teclado. Mostrar la cadena del final al principio utilizando subíndices negativos.
  • Confeccionar un programa con las siguientes funciones:
    1) Cargar una lista con 5 palabras.
    2) Intercambiar la primer palabra con la última.
    3) Imprimir la lista

    Ver video

Solución
ejercicio177.py

palabra=input("Ingresar una palabra:")
indice=-1
for x in range(len(palabra)):
    print(palabra[indice],end="")
    indice=indice-1




ejercicio178.py

def cargar():
    palabras=[]
    for x in range(0,5):
        pal=input("Ingrese una palabra:")
        palabras.append(pal)
    return palabras


def intercambiar(palabras):
    aux=palabras[0]
    palabras[0]=palabras[-1]
    palabras[-1]=aux


def imprimir(palabras):
    print(palabras)


# bloque principal

palabras=cargar()
imprimir(palabras)
intercambiar(palabras)
imprimir(palabras)