37 - Porciones de listas, tuplas y cadenas de caracteres

El lenguaje Python nos facilita una sintaxis muy sencilla par recuperar un trozo de una lista, tupla o cadena de caracteres.

Veremos con una serie de ejemplos como podemos rescatar uno o varios elementos de las estructuras de datos mencionadas.

Programa: ejercicio170.py

Ver video

lista1=[0,1,2,3,4,5,6]
lista2=lista1[2:5]
print(lista2) # 2,3,4
lista3=lista1[1:3]
print(lista3) # 1,2
lista4=lista1[:3]
print(lista4) # 0,1,2
lista5=lista1[2:]
print(lista5) # 2,3,4,5,6

Para recuperar una "porción" o trozo de una lista debemos indicar en el subíndice dos valores separados por el caracter ":".

Del lado izquierdo indicamos a partir de que elementos queremos recuperar y del lado derecho hasta cual posición sin incluir dicho valor.

Por ejemplo con la sintaxis:

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

Estamos recuperando de la posición 2 hasta la 5 sin incluirla.

También es posible no indicar alguno de los dos valores:

lista4=lista1[:3]
print(lista4) # 0,1,2

Si no indicamos el primer valor estamos diciendo que queremos recuperar desde el principio de la lista hasta la posición menos uno indicada después de los dos puntos.

En cambio si no indicamos el valor después de los dos puntos se recupera hasta el final de la lista:

lista5=lista1[2:]
print(lista5) # 2,3,4,5,6

Problema 1:

Confeccionar una función que le enviemos un número de mes como parámetro y nos retorne una tupla con todos los nombres de meses que faltan hasta fin de año.

Programa: ejercicio171.py

Ver video

def meses_faltantes(numeromes):
    meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')
    return meses[numeromes:]


# bloque principal

print("Imprimir los nombres de meses que faltan hasta fin de año")
numeromes=int(input("Ingrese el numero de mes:"))
mesesfalta=meses_faltantes(numeromes)
print(mesesfalta)

Utilizamos el concepto de porciones que nos brinda Python para recuperar en forma muy sencilla un trozo de una tupla. La función meses_faltantes recibe como parámetro un entero y retorna una tupla:

def meses_faltantes(numeromes):
    meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')
    return meses[numeromes:]

Como vemos generamos una tupla a partir del valor "numeromes" hasta el final de la tupla:

    return meses[numeromes:]

En el bloque principal del programa cargamos el número de mes, llamamos a la función e imprimimos la tupla devuelta por la función:

# bloque principal

print("Imprimir los nombres de meses que faltan hasta fin de año")
numeromes=int(input("Ingrese el numero de mes:"))
mesesfalta=meses_faltantes(numeromes)
print(mesesfalta)

Hay que tener en cuenta que el concepto de "porciones" se puede aplicar en forma indistinta a listas, tuplas y cadenas de caracteres.

Problema 2:

Confeccionar una función que reciba una cadena de caracteres y nos devuelva los tres primeros.
En el bloque principal del programa definir una tupla con los nombres de meses. Mostrar por pantalla los primeros tres caracteres de cada mes.

Programa: ejercicio172.py

Ver video

def primeros_tres(cadena):
    return cadena[:3];


# bloque principal

meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')
for x in meses:
    print(primeros_tres(x))

porciones en python - cadenas de caracteres

La función primeros_tres recibe un string y retorna los tres primeros caracteres:

def primeros_tres(cadena):
    return cadena[:3];

En el bloque principal definimos la tupla y luego la recorremos con un for llamando en la misma a la función que acabamos de crear:

meses=('enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre')
for x in meses:
    print(primeros_tres(x))

Acotaciones

El comando "del" de Python para la eliminación de componentes de una lista también funcionan con la sintaxis de porciones:

del(lista[2:5]) # eliminamos los elementos de las posiciones 2,3 y 4

Problemas propuestos

  • Realizar un programa que contenga las siguientes funciones:
    1) Carga de una lista de 10 enteros.
    2) Recibir una lista y retornar otra con la primer mitad (se sabe que siempre llega una lista con una cantidad par de elementos)
    3) Imprimir una lista.

    Ver video

  • Cargar una cadena por teclado luego:
    1) Imprimir los dos primeros caracteres.
    2) Imprimir los dos últimos
    3) Imprimir todos menos el primero y el último caracter.

    Ver video

Solución
ejercicio173.py

def cargar():
    lista=[]
    for x in range(10):
        valor=int(input("Cargar valor:"))
        lista.append(valor)
    return lista


def retornar_mitad(lista):
    mitad=len(lista)//2
    return lista[:mitad]


def imprimir(lista):
    print("Contenido de la lista")
    print(lista)


# bloque principal

lista=cargar()
lista2=retornar_mitad(lista)
imprimir(lista)
imprimir(lista2)




ejercicio174.py

cadena=input("Ingrese una cadena de caracteres:")
print("Los dos primeros caracteres")
print(cadena[:2])
print("Los dos ultimos caracteres")
print(cadena[len(cadena)-2:])
print("Todos los caracteres menos el primero y el ultimo")
print(cadena[1:len(cadena)-1])