Lista, tuplas, diccionarios

Programación - Ingeniería Civil

Profesor: Santiago Quiñones

Docente Investigador

Departamento de Ingeniería Civil

Contenidos

Colecciones de datos

Colecciones de datos

Las colecciones de datos en Python permiten almacenar y manipular múltiples valores de manera eficiente. Las principales estructuras de colección en Python son:

Ejemplo motivador

# ❌ Sin estructuras de datos organizadas
columna1_id = "C1"
columna1_altura = 4.5
columna1_diametro = 0.6
columna1_carga = 1200

columna2_id = "C2"
columna2_altura = 4.5
columna2_diametro = 0.5
columna2_carga = 1100
# ... ¡Imagina 100 columnas así!

# ✅ Con estructuras organizadas
columnas = {
    "C1": {"altura": 4.5, "diametro": 0.6, "carga": 1200},
    "C2": {"altura": 4.5, "diametro": 0.5, "carga": 1100}
}

Listas

Tipos de datos en Python

  • float - números reales
  • int - números enteros
  • str - cadenas, texto
  • bool - True, False

Cada variable representa un solo valor

altura = 1.73 
alto = True

Problema

  • Ciencia de datos: muchos puntos de datos
  • Altura de una familia entera
altura1 = 1.73 
altura2 = 1.68
altura3 = 1.71
altura4 = 1.89

Listas en Python

Las listas son estructuras de datos que pueden contener múltiples valores en un orden específico. Son mutables, lo que significa que sus elementos pueden modificarse después de su creación.

Creación de listas

valores = [10, 20, 30, 40]

Sintaxis

Listas Python

  • [a, b, c]
[1.73, 1.68, 1.71, 1.89]
[1.73, 1.68, 1.71, 1.89]
familia = [1.73, 1.68, 1.71, 1.89]
print(familia)
[1.73, 1.68, 1.71, 1.89]
  • nombra una colección de valores
  • contiene cualquier tipo de datos

Listas en Python

Acceder a los elementos de una lista

print(valores[0]) # Accede al primer elemento
print(valores[2]) # Accede al tercer elemento
print(valores[3]) # Accede al último elemento

# Salida
10
30
40

Subconjuntos en listas

familia = ["hermano", 1.73, "hermana", 1.68, "papa", 1.71, "mama", 1.89]
print(familia)
["hermano", 1.73, "hermana", 1.68, "papa", 1.71, "mama", 1.89]
familia[3]
1.68

Listas en Python

Acceder a elementos con índices negativos

print(valores[-1]) # Accede al último elemento
print(valores[-2]) # Accede al penúltimo elemento


# Salida
40
30

-1

-2

-3

-4

Subconjuntos en listas

["hermano", 1.73, "hermana", 1.68, "papa", 1.71, "mama", 1.89]
familia[4]
'papa'
familia[-1]
1.89
familia[7]
1.89

Listas en Python

Acceder a un rango de elementos

# Elementos desde la posición 1 hasta 2 (sin incluir 3)
print(valores[1:3]) 

Se puede seleccionar un subconjunto de elementos de una lista usando rebanado (slicing).

nombre_lista [   inicio   :   final   ]

                             inclusivo      exclusivo

Rebanando listas

["hermano", 1.73, "hermana", 1.68, "papa", 1.71, "mama" 1.89]
familia
[1.68, "papa"]
familia[3:5]

[   inicio   :   final   ]

    inclusivo      exclusivo

[1.73, "hermana", 1.68]
familia[1:4]

Rebanando listas

["hermano", 1.73, "hermana", 1.68, "papa", 1.71, "mama", 1.89]
familia
["hermano", 1.73, "hermana", 1.68
familia[:4]
[1.71, "mama" 1.89]
familia[5:]

Listas en Python

Modificar elementos en una lista

valores[2] = 35 # Modifica el tercer elemento

índice del elemento a modificar

nuevo valor

Modificación de datos

# Mediciones de resistencia del hormigón (MPa)
resistencias = [28.5, 30.2, 29.8, 31.1, 27.9]

# Agregar nuevas mediciones
resistencias.append(32.1)              # Al final
resistencias.insert(2, 29.5)           # En posición específica
resistencias.extend([33.0, 28.9])      # Múltiples valores

# Eliminar datos erróneos
resistencias.remove(27.9)              # Por valor
ultimo = resistencias.pop()            # Elimina y retorna último
del resistencias[1]                    # Por índice

Búsqueda y análisis

# Mediciones de resistencia del hormigón (MPa)
resistencias = [28.5, 30.2, 29.8, 30.0, 31.1, 27.9]

print(30.0 in resistencias) # verifica si el valor exacto 30.0 está presente en la lista

# Análisis de calidad
if 30.0 in resistencias:
    print("Hay medición de 30 MPa")

posicion = resistencias.index(31.1)    # Encontrar posición
cantidad_altas = resistencias.count(30.2)  # Contar apariciones

# Estadísticas básicas
total_ensayos = len(resistencias)
resistencia_max = max(resistencias)
resistencia_min = min(resistencias)
promedio = sum(resistencias) / len(resistencias)

Estructuras repetitivas

Implementación en Python - Estructura for

for variable in iterable:
    # Código a ejecutar en cada iteración
    

Sintaxis

Nombre que se da al elemento actual en cada iteración

cualquier objeto iterable (lista, tupla, diccionario, cadena)

El for es otro bloque de código, se debe agregar los dos puntos y utilizar identaciones para las acciones.  

Bucles con listas

materiales = ["Hormigón", "Acero", "Madera"]
resistencias = [25, 30, 35]

# Bucle simple
for material in materiales:
    print(material)

# Bucle con índice
for i, material in enumerate(materiales):
    print(f"{i}: {material}")

# Bucle con dos listas
for material, resistencia in zip(materiales, resistencias):
    print(f"{material}: {resistencia} MPa")

# Bucle con rango
for i in range(len(materiales)):
    print(f"Material {i+1}: {materiales[i]}")

Tuplas

Tuplas en Python

Las tuplas son similares a las listas, pero su principal diferencia es que son inmutables, lo que significa que no pueden modificarse después de su creación.

Creación de una tupla

coordenadas = (3.5, 5.7)

Sintaxis

Tuplas en Python

Acceder a elementos en una tupla

# Coordenadas de un punto (x, y)
punto_A = (125.50, 250.75)  # metros

# Propiedades del hormigón H-25
hormigon_H25 = ("Hormigón", 25, 2400)  # tipo, f'c, densidad

# Acceso igual que listas
x_coord = punto_A[0]                # 125.50
tipo_material = hormigon_H25[0]     # "Hormigón"

Desempaquetado 

# Muy útil para trabajar con coordenadas
x, y = punto_A
print(f"Punto en X: {x}, Y: {y}")

# Para propiedades de materiales
tipo, fc, densidad = hormigon_H25
print(f"Material: {tipo}, f'c: {fc} MPa")

Ejemplo práctico: distancia entre 2 puntos

import math

def distancia_entre_puntos(punto1, punto2):
    """Calcula distancia entre dos puntos"""
    # extraer la información de punto1 y punto2
    # completa el código aquí
    
    distancia = math.sqrt((x2-x1)**2 + (y2-y1)**2)
    return distancia

# Uso
inicio = (0, 0)
final = (30, 40)
dist = distancia_entre_puntos(inicio, final)
print(f"Distancia: {dist} m")  # Resultado: 50.0 m

Diccionarios

Diccionarios en Python

Los diccionarios almacenan datos en pares clave-valor y permiten un acceso rápido a la información.

Creación de un diccionario

estudiante = {"nombre": "Carlos", "edad": 22, "curso": "Python"}

Sintaxis

Diccionarios en Python

Creación y acceso

# Propiedades de una columna
columna = {
    "id": "C1",
    "altura": 4.5,          # metros
    "diametro": 0.6,        # metros
    "carga": 1200           # kN
}

# Acceso a propiedades
altura = columna["altura"]          # 4.5
carga = columna.get("carga", 0)     # 1200 (seguro), devuelve 0 en el caso de que no encuentre

Iteración

# Propiedades de una columna
columna = {
    "id": "C1",
    "altura": 4.5,          # metros
    "diametro": 0.6,        # metros
    "carga": 1200           # kN
}

# Recorrer todas las propiedades
for propiedad, valor in columna.items():
    print(f"{propiedad}: {valor}")
    

# Solo las claves
propiedades = list(columna.keys())

# Solo los valores
valores = list(columna.values())

# Verificaciones
if "carga" in columna:
    print(f"Carga axial: {columna['carga']} kN")

Ejemplo práctico: calculadora de área

def calcular_area_columna(columna):
    """Calcula el área de una columna circular"""
    import math
    
    # extraer el dato del diametro del diccionario columna
    # complete aquí el código
    
    radio = diametro / 2
    area = math.pi * radio**2
    
    return area

# Uso
mi_columna = {
    "id": "C1",
    "diametro": 0.6,  # metros
    "altura": 4.5
}

area = calcular_area_columna(mi_columna)
print(f"Área de la columna: {area:.3f} m²")

Ejemplo práctico: control de cargas en vigas

def analizar_cargas_vigas(cargas):
    """Analiza las cargas en vigas y clasifica por criticidad"""
    cargas_altas = []
    cargas_normales = []
    
    for carga in cargas:
        if carga > 200:  # kN
            cargas_altas.append(carga)
        else:
            cargas_normales.append(carga)
    
    return {
        "total_vigas": len(cargas),
        "cargas_altas": cargas_altas,
        "cargas_normales": cargas_normales,
        "carga_maxima": max(cargas),
        "carga_promedio": sum(cargas) / len(cargas)
    }

# Uso
cargas_vigas = [150, 220, 180, 250, 170, 300, 190]
resultado = analizar_cargas_vigas(cargas_vigas)
print(f"Vigas con cargas altas: {len(resultado['cargas_altas'])}")

Problemas

Reto 1: Suma de elementos

 

Generar una función devuelva la suma de un arreglo bidimensional; mismo que se lo recibe como parámetro.

 

El arreglo para probar la solución es:

informacion = [[1, 2, 3], [10, 20, 30], [100, 200, 300]]

 

La función debe se invocada desde la función principal; además el método debe recibir como parámetro un arreglo bidimensional.

Reto 2: Promedio

Dado un arreglo; por ejemplo:

 

informacion = [1, 2, 3, 10, 20, 30, 100, 200, 300]

 

Generar las función que devuelva la media aritmética del arreglo; recibe como parámetro un arreglo de tipo entero

 

columnas= {
    "Columna A1": {
        "material": "Hormigón armado",
        "altura": 3.0,  # en metros
        "seccion_transversal": "rectangular",
        "dimensiones": {
            "ancho": 0.4,  # en metros
            "profundidad": 0.6  # en metros
        },
        "capacidad_carga": 2000,  # en kilonewtons
        "ubicacion": "Planta baja"
    },
    "Columna B2": {
        "material": "Acero",
        "altura": 4.5,  # en metros
        "seccion_transversal": "circular",
        "dimensiones": {
            "diametro": 0.5  # en metros
        },
        "capacidad_carga": 2500,  # en kilonewtons
        "ubicacion": "Primer piso"
    }
}

Reto 3: Extracción de datos

Tema URL
Espacios de nombres, módulos https://j2logo.com/python/tutorial/espacios-de-nombres-modulos-y-paquetes/
Parámetros posicionales y parámetros con nombre en una función https://j2logo.com/tipo-parametros-funcion-python/
Variables locales y globales https://snakify.org/es/lessons/functions/
Funciones y parámetros https://j2logo.com/python/tutorial/funciones-en-python/#function-params
Importing Your Own Python Modules Properly https://www.youtube.com/watch?v=GxCXiSkm6no&ab_channel=NeuralNine

Referencias