martes, 14 de octubre de 2014

Python (03) Listas bidimensionales

Averiguando como se pueden hacer arrays bidimensionales en Python, debido a una pregunta que me ha hecho un buen amigo, he descubierto dos formas, con tan solo lo que hemos visto hasta ahora.
La primera tal vez sea la más intuitiva ya que se asemeja a una de las formas de realizarse en otros lenguajes como cualquier programador verá, consistiendo simplemente en declarar una lista como se dice en Python dentro de otra lista.
cadena = [[1,2,3],[4,5,6]]
print (cadena[1])

Lo cual nos da como resultado:
[4, 5, 6]

Pero se puede hacer una lista introduciendo otras listas ya definidas, lo unico que hay que hacer es definir las listas de las que se compone la lista final antes.
Por ejemplo supongamos que queremos hacer dos listas, una con nombres femeninos y otra con nombres masculinos y luego integrarla en otra lista, sería algo tan sencillo como esto.
nombres = ['Ana', 'Sonia', 'Helena']
nombres2 = ['Miguel', 'Carlos', 'Juan']
nombresFinales = [nombres, nombres2]
print ('Imprimiendo valor [1][1]', nombresFinales [1][1])

En el ejemplo vemos como se crea la lista nombresFinales que esta compuesta por las dos listas anteriores, y que nos da como resultado:
Imprimiendo valor [1][1] Carlos

Bien ya hemos empezado a hacer las listas bidimensionales, pero ¿como las recorremos?, pues bien se debe de hacer con dos for, tal y como vemos en el siguiente ejemplo:
nombres = ['Ana', 'Sonia', 'Helena']
nombres2 = ['Miguel', 'Carlos', 'Juan']
nombresFinales = [nombres, nombres2]

for i in range(len(nombresFinales)):
    print ('\n')
    for j in range(len(nombresFinales[i])):
        print (nombresFinales [i][j], end=', ')

De esta forma se imprimen todos los nombres separados en dos líneas.
Ana, Sonia, Helena,
Miguel, Carlos, Juan


Esto es gracias a que cada vez que imprime un nombre hemos colocado la sentencia end=', ' que le dice que despues de cada impresión no haga una nueva línea, sino que una coma y que siga en la misma.

Es mas, ya que estamos haciendo cosas divertidas, podríamos hacer que dentro del primer for se distinguiera si estamos recorriendo los nombres masculinos o femeninos para que la salida por consola nos informase de ello introduciendo tan solo un if y un elif:
nombres = ['Ana', 'Sonia', 'Helena']
nombres2 = ['Miguel', 'Carlos', 'Juan']
nombresFinales = [nombres, nombres2]

for i in range(len(nombresFinales)):
    print ('\n')
    if i == 0:
        print ('###### NOMBRES FEMENINOS #####')
    elif i == 1:
        print ('###### NOMBRES MASCULINOS #####')
    for j in range(len(nombresFinales[i])):
        print (nombresFinales [i][j], end=', ')

Dandondos como resultado:
###### NOMBRES FEMENINOS #####
Ana, Sonia, Helena,

###### NOMBRES MASCULINOS #####
Miguel, Carlos, Juan,


Como se puede ver son estructuras muy sencillas de trabajar y con grandes posibilidades, además de que para el tratamiento de datos son muy importantes.

Esta entrada se la dedico a mi buen amigo Carlos Alvarez, por haberme preguntando como eran estas listas y a quien les hacían falta para poder hacer su algoritmo.

No hay comentarios:

Publicar un comentario