Santiago Quiñones Cuenca
Software Developer and Educator, Master in Software Engineering, Research UTPL {Loja, Ecuador} Repositories: http://github.com/lsantiago
Programación - Ingeniería Civil
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
Cada variable representa un solo valor
altura = 1.73
alto = True
Problema
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
[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]
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 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'])}")
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.
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"
}
}
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 |
By Santiago Quiñones Cuenca
Software Developer and Educator, Master in Software Engineering, Research UTPL {Loja, Ecuador} Repositories: http://github.com/lsantiago