12 de mayo de 2016

17. Más sobre listas. Tuplas.

Listas: más sobre ellas. Notación de rangos y métodos interesantes.

Observa este programa.

# *-* coding:utf-8 *-*
xs = [2003, 6789, 5488, 3245]

print xs

print ("Longitud de la lista: %d") % (len(xs))

print ("Primer elemento %d") % (xs[0])
print ("Último elemento %d") % (xs[3])

print ("Sublista, del principio hasta el elemento 1 %s") % (xs[:1])
print ("Del elemento 0 al elemento 1-1, o sea, el 0")
print ("Recuerda, el orden de una lista empieza en el índice 0\n")

print ("Sublista [1:1] %s") % (xs[1:1])
print ("Recuerda, del elemento 1 al elemento 1-1=0... Inexistente\n")

print ("Sublista [1:2] %s") % (xs[1:2])
print ("Del elemento 1 al elemento 2-1, o sea, el 1. \n")

print ("Sublista [1:4] %s") % (xs[1:4])
print ("Del elemento 1 al elemento 4-1, o sea, el 3. \n")

print ("Sublista,. Menos el último [:-1] %s") % (xs[:-1])
print ("Sublista,  Menos los dos últimos [:-2] %s") % (xs[:-2])

print ("Sublista, el último [-1:] %s") % (xs[-1:])
print ("Sublista, los dos últimos [-2:] %s") % (xs[-2:])
===

Otras operaciones de lista

# *-* coding:utf-8 *-*
xs = [2003, 6789, 5488, 3245]

print xs

xs[1] = 10325

print ("Cambio un elemento de la lista - índice 1: %s") % (xs)

xs.append(9999)

print ("Añado un elemento al final: %s") % (xs)

xs.insert(2, 2332)

print ("Inserto un elemento con índice 2: %s") % (xs)

xs.insert(2, 9999)

print ("Inserto un elemento con índice 2, de nuevo, el anterior pasa al 3: %s") % (xs)

xs.remove(2332)

print ("Quitar un elemento de la lista, el 2332: %s") % (xs)

xs.remove(9999)

print ("Quitar un elemento de la lista, el 9999: %s") % (xs)
print ("Si el elemento está repetido, se quita el primero de la lista ")
print ("Si intento quitar uno que no exista, da un error")

estaONo = 5488 in xs
print ("Comprobar si está o no en la lista %s") % (estaONo)

indice = xs.index(5488)
print ("Devueleve el índice o posición de un elemento, 5488: %d") % (indice)
print ("%s") % (xs)
===

Tuplas. Elementos inmutables.

A diferencia de las listas, cuyos elementos pueden cambiar, vamos ahora a estudiar las tuplas. Las tuplas, una vez definidas en el programa son inmutables, es decir , no se pueden cambiar. Pero se pueden construir de elementos de distinto tipo. Por ejemplo,
# *-* coding:utf-8 *-*
# TUPLAS

fecha = (10,"Enero",2015)

# Esto no se puede hacer:  print ("La fecha es %s") % (fecha)

print fecha

print ("\nSe puede usar la notación por rangos, vista antes para las listas")
print fecha[:2]

# Esto no se puede hacer:   fecha[2] = 2016, ya que son inmutables.Enero

print ("\nSe puede calcular su longitud")
print len(fecha)

print ("\nSe pueden definir tuplas unitarias; no olvidar la COMA")
unitaria = (1234, )  # Si se pone unitaria = (1234) NO FUNCIONA
print len(unitaria)
print unitaria
===
Las tuplas se pueden EMPAQUETAR, es decir, varias variables se pueden almacenar en una tupla. Y también DESEMPAQUETAR.
# *-* coding:utf-8 *-*
# EMPAQUETAR TUPLAS
dia = 10
mes = "Junio"
anno = 2015

fecha = dia, mes, anno

print fecha

# DESEMPAQUETAR TUPLAS
dia2, mes2, anno2 = fecha
print dia2
print ("En el mes de %s") % (mes2)
print ("dentro de dos años %d") % (anno2 + 2)
= = =

Las cadenas son listas y se pueden hacer muchas cosas con ellas

Las cadenas son listas, de caracteres, y como tal pueden ser tratadas.
Por ejemplo se les puede asignar la notación de rangos para obtener subcadenas o substrings.
# *-* coding:utf-8 *-*

miCadena = "Esta es una frase o conjunto de palabras con sentido"
print miCadena
print miCadena[3:]
print miCadena[:-2]
print miCadena[-2]
print miCadena[4:24]
===
Pero las cadenas tienen métodos particulares. Por ejemplo:
  1. Separar la cadena por uno o varios conjuntos de caracteres. Función split. Esta función acepta como argumento el carácter por el cual se va a dividir.
  2. Unir con el método join una lista en una nueva cadena, usando otro separador.
# *-* coding:utf-8 *-*

miCadena = "Esta es una frase o conjunto de palabras con sentido"

print miCadena

# Separando la cadena por el caracter espacio
# no hace falta. En el caso del espacio es el caracter por defecto. Funcionaría
# cs = miCadena.split()
cs = miCadena.split(" ")
print cs

# Vuelvo a unirla, pero usando los caracteres ---
miCadena2 = "---".join(cs)
print miCadena2
===
Para más información, y para encontrar muchos más métodos referidos al objeto String, se puede ver esta web: http://librosweb.es/libro/python/capitulo_6.html

Ordenando listas

Los elementos de una lista pueden ordenarse de dos formas:
  1. La lista se puede convertir en una lista ordenada. Método sort o reverse
  2. La lista puede copiarse a otra lista ordenada: función sorted.
# *-* coding:utf-8 *-*

miLista = [15, 10, 4, 7, 5, 3, 4]

miListaOrdenada = sorted(miLista)

print ("La lista desordenada es %s y la ordenada %s") % (miLista, miListaOrdenada)

print("... pero puedo convertir la lista original en una que ya se queda ordenada")

miLista.sort()

print ("La lista ya ordenada %s") % (miLista)

print("pero la puedo ordenar en orden inverso")

miLista.reverse()

print ("La lista en orden inverso %s") % (miLista)
===
¿Qué ocurre con cadenas de caracteres?
# *-* coding:utf-8 *-*

miLista = ["cC","bB", "dD", "aA"]
print sorted(miLista)

# cuidado, y si las mayúsculas y las minúsculas están
# alternadas como primera letra ¿¿??
miLista = ["Cc","bB", "Dd", "aA"]
print sorted(miLista)
# Ordena PRIMERO LAS MAYÚSCULAS y después las minúsculas.

# A menos que use un criterio de ordenación
print sorted(miLista, key=str.lower)
# En este caso la ordena como si las mayúsculas las hubiera convertido a minúsculas.

# O al revés...
print sorted(miLista, key=str.upper)

#¿Qué ordena antes, números o letras?
miLista2 = [7, "cC", 2, 5, 1, "aA", 3, "fF", 0.1, 5.32]
print sorted(miLista2)

# o al revés
aa = sorted(miLista2, reverse=True)
print aa

bb = aa + miLista2
print sorted(bb)
===
Y un poco más
# *-* coding:utf-8 *-*

miCadena ="Frase rimbombante"

miCadena2 = sorted(miCadena, key=str.lower)
print miCadena2

print ("Número de caracteres: %d") % (len(miCadena2))
print ("Número de caracteres \"a\": %d") % (miCadena.count("a"))

No hay comentarios:

Publicar un comentario