Mostrando entradas con la etiqueta 17python. Mostrar todas las entradas
Mostrando entradas con la etiqueta 17python. Mostrar todas las entradas

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"))