Ejemplo con listas de dos dimensiones
Ejemplo estación meteorológica
Imagina que desarrollas un programa para una estación meteorológica automática. El dispositivo registra la temperatura del aire cada hora y lo hace durante todo el mes. Esto te da un total de 24 × 31 = 744 valores. Intentemos diseñar una lista capaz de almacenar todos estos resultados.
- Decidimos que para guardar la temperatura vamos a usar un número flotante.
- Vamos a usar una lista bidimensional para guardar la información.
- Decidimos que en cada fila guardaremos las temperaturas de cada hora, es decir tendrá 24 elementos.
- La lista tendrá 31 filas, ya que cada fila se asignará a un día del mes, es decir la lista tendrá una dimensión de 31 x 24.
Si queremos crear la lista e inicializarla a 0, sería de la siguiente manera:
temperaturas = [[0.0 for h in range(24)] for d in range(31)]
Vamos suponer que la matriz se actualiza automáticamente utilizando agentes de hardware especiales. Nosotros vamos a simular ese comportamiento actualizando la matriz con temperaturas aleatorias (no es muy real pero nos vale!!!).
import random
num_filas = 31
num_columnas = 24
temperaturas = [[0.0 for h in range(24)] for d in range(31)]
# Actualizamos las temperaturas, con valores aleatorios.
for dia in range(num_filas):
for hora in range(num_columnas):
temperaturas[dia][hora] = round(random.uniform(0, 40), 1)
print(temperaturas)
Ejercicio 1: Calcular la temperatura media mensual del mediodía
Creamos un programa para determinar la temperatura promedio mensual del mediodía. Suma las 31 lecturas registradas al mediodía y divida la suma por 31.
El programa sería el siguiente:
import random
num_filas = 31
num_columnas = 24
temperaturas = [[0.0 for h in range(24)] for d in range(31)]
# Actualizamos las temperaturas, con valores aleatorios.
for dia in range(num_filas):
for hora in range(num_columnas):
temperaturas[dia][hora] = round(random.uniform(0, 40), 1)
# Calculamos la temperatura media del mes al mediodía
total = 0.0
for temp_en_dia in temperaturas:
total += temp_en_dia[11]
media = total / 31
print("Temperatura promedio al mediodía:", media)
- La variable
temp_en_diautilizada por el bucleforno es un escalar: cada paso a través de la matriztemperaturaslo asigna a la siguiente fila de la matriz. - La temperatura al mediodía está guardada en la posición 11 de la fila (
temp_en_dia) donde se guardan las temperaturas de cada hora. - La variable
totales una cumulador que nos permitirá ir sumando las temperaturas.
Ejercicio 2: Calcular la temperatura más alta del mes
Vamos a escribir un programa que calcule la temperatura más alta. Veamos el código:
import random
num_filas = 31
num_columnas = 24
temperaturas = [[0.0 for h in range(24)] for d in range(31)]
# Actualizamos las temperaturas, con valores aleatorios.
for dia in range(num_filas):
for hora in range(num_columnas):
temperaturas[dia][hora] = round(random.uniform(0, 40), 1)
# Calculamos la temperatura más alta
temp_mas_alta = -100.0
for temp_en_dia in temperaturas:
for temp in temp_en_dia:
if temp > temp_mas_alta:
temp_mas_alta = temp
print("La temperatura más alta fue:", temp_mas_alta)
- La variable
temp_en_diaitera en todas las filas de la matriztemperaturas. - La variable
tempitera a través de todas las mediciones tomadas en un día. - La variable
temp_mas_altanos permite guardar las temperaturas que vamos recorriendo más altas. Lo inicializamos a un número muy pequeño.
Ejercicio 3: Calcular los días en que las temperatura al mediodía fue menor que 20 ºC
Vamos a realizar un programa que calcule la cantidad de días en que las temperatura al mediodía fue menor que 20 ºC. Veamos el código:
import random
num_filas = 31
num_columnas = 24
temperaturas = [[0.0 for h in range(24)] for d in range(31)]
# Actualizamos las temperaturas, con valores aleatorios.
for dia in range(num_filas):
for hora in range(num_columnas):
temperaturas[dia][hora] = round(random.uniform(0, 40), 1)
# Calculamos la cantidad de días en que las temperatura al mediodía fue menor que 20 ºC.
dias_calurosos = 0
temp_mas_alta = -100.0
for temp_en_dia in temperaturas:
if temp_en_dia[11]>20:
dias_calurosos += 1
print(dias_calurosos, "fueron los días calurosos.")
- En este programa usamos la variable
dias_calurososcomo contador para que nos cuente la cantidad de días que cumplen la condición.
Introducción a las listas multidimensionales
¿Cómo cambiaría nuestra estructura donde guardamos las temperaturas, si quisiéramos guardar las temperaturas de cada mes del año?
En ese caso, necesitaríamos una lista de 3 dimensiones: una para guardar las temperaturas cada hora, otra para guardar los días y otra para guardar los meses.
Gráficamente sería un cubo (3 dimensiones) donde la lista bidimensional que hemos utilizado se repetiría 12 veces.
¿Y si además, quisiéramos guardar la información de cada año?
En el próximo apartado estudiaremos las listas multidimensionales.