Los ciclos anidados son un concepto esencial cuando se trabaja con estructuras de datos complejas en programación. Básicamente, se trata de un ciclo dentro de otro ciclo, lo que permite iterar sobre estructuras de listas dentro de listas, similares a una matriz o tabla. Esta técnica resulta muy útil para manipular y recorrer datos organizados de manera jerárquica o tabular.
Crear una matriz en Python
Antes de adentrarnos en los ciclos anidados, consideremos cómo se construye una matriz en Python. Este lenguaje no tiene una estructura de datos matriz propiamente dicha, pero se puede lograr modelar una usando una lista de listas. Este método es potente, ya que permite operaciones complejas de acceso y manipulación de datos:
Esta estructura, cuando se visualiza, se asemeja a una tabla con filas y columnas.
Acceder a valores en una matriz
Una vez que se ha definido una matriz, se pueden acceder a los elementos utilizando índices, similares a coordenadas en un plano cartesiano. Por ejemplo:
# Acceder al valor en la primera fila, segunda columnaelemento = matriz[0][1]# Resultado es 2
Aquí, matriz[0] sugiere la primera fila y el segundo índice [1] apunta al segundo elemento en esa fila.
Implementar ciclos for anidados
El uso de ciclos for anidados es crucial para iterar sobre cada elemento en una matriz. Este enfoque permite recorrer cada fila y, dentro de cada fila, cada columna:
for fila in matriz:for item in fila:print(item)
En este ejemplo:
El primer for recorre cada fila de la matriz.
El segundo for se encarga de recorrer cada elemento dentro de la fila, imprimiendo su valor.
Esta técnica es especialmente útil cuando se necesita realizar operaciones sobre toda la estructura, como calcular sumas, buscar elementos específicos o transformar datos.
Buenas prácticas al utilizar ciclos anidados
Una práctica recomendada es utilizar nombres descriptivos en las variables dentro de los ciclos anidados. Esto ayuda a que el código sea más comprensible y reduce el riesgo de errores:
Usa fila en lugar de simplemente elemento para el primer ciclo.
Usa item en el segundo ciclo para indicar que se trata de elementos individuales de una fila.
for fila in matriz:for item in fila:print(item)
Casos de uso comunes
El manejo de ciclos anidados es vital cuando se trabaja con formatos de datos como CSVs, que presentan una estructura tabular. En estos casos, es casi inevitable encontrarse con esta técnica al procesar los datos:
Iteración sobre archivos CSV: Al leer líneas y columnas, los for anidados permiten manipular datos en cada celda.
Juegos y aplicaciones gráficas: Las posiciones de entidades o sprites pueden manejarse a través de matrices y ciclos anidados para actualizar y verificar estados.
Como hemos visto, los ciclos anidados son una herramienta clave en el arsenal de cualquier programador, facilitando la manipulación y el análisis de datos organizados de forma jerárquica. ¡Sigue explorando esta poderosa técnica y observa cómo maximiza tus habilidades de programación!
Los ciclos anidados suelen usarse para llenar matrices (un vector de varias dimensiones) donde un ciclo recorre cada fila y otro cada columna o viceversa
Muy interesante. Cada que se ve algo así, me encantaria saber como podría aplicarse por ejemplo en un Dataframe
Excelente aporte
Segun el caso, los ciclos anidados yo los asimilo a las muñecas rusas, "Matrioshkas"
Con la premisa que se resuelven de afuera hacia adentro
Como pueden ver el resultado del profe, primero imprimio la "fila" y luego la "columna"
for row inmatriz:print(row)for column inrow:print(column)'''print
[1,2,3]123[4,5,6]456[7,8,9]789'''
Siempre me acordare de esto. La mejor manera de aprender... impactar tu memoria con cosas que generen emocion. Esto me genero mucha ternura gracias!
Un reto divertido, espero les guste:
El código:
def anidado_uno():for row inrange(1,12): a =''for x inrange(1, row): a = a +'x'print(a)def anidado_dos():for row inrange(1,12): a =12- row
toPrint =''for _ inrange(1, a): toPrint = toPrint +'x'print(toPrint)def run():anidado_uno()print('=='*8)anidado_dos()if __name__ =='__main__':run()
Excelente forma de practicar!
Divertido, gracias.
Que buena clase! 💚
Les comparto el código
# Ciclos anidados
matriz =[[1,2,3],[4,5,6],[7,8,9]]# Imprime la primera fila de la matriz
print(matriz[0])# Imprime el elemento 2 de la primera fila
print(matriz[0][1])'''
Recorremos las filas de la matriz y por cada fila recorremos cada una de las columnas
'''
for row inmatriz:print(row)for column inrow:print(column)
Gracias
super
MATRIZ : datos organizados
Filas y Columnas
For anidados
Es posible anidar los for, es decir, meter uno dentro de otro. Esto puede ser muy útil si queremos iterar algún objeto que en cada elemento, tiene a su vez otra clase iterable.
→ 56, 34, 1, 12, 4, 5, 9, 4, 3
Al bucle que se encuentra dentro del otro se le puede denominar bucle interior o bucle interno. El otro bucle sería el bucle exterior o bucle externo.
Es recomendable que los nombres de las variables de control de los bucles anidados no coincidan, para evitar ambigüedades.
Hola, ha sido un tema un poco complejo esto de los ciclos, entiendo la explicación pero al momento de hacer el código me bloqueo 😣😣 y no sé como darle la forma, seguiré practicando
busca ejemplos en la web, ejercicios resueltos, animo!!!
busque ejemplos hechos y ejecuteles, luego cambie los datos parte por parte y valla ejecutandole para que vea como cambia el resultado, luego podra escribirlos (la estructura) ya de ahi, solo es reemplazar los datos
Los ciclos anidados en Python se refieren a la situación en la que un ciclo está contenido dentro de otro ciclo. Esto significa que hay un bucle interno que se ejecuta repetidamente dentro de un bucle externo.
Los ciclos anidados son útiles cuando se necesita iterar sobre una estructura de datos multidimensional, como una matriz bidimensional o una lista de listas. Con los ciclos anidados, es posible acceder y procesar cada elemento de manera sistemática en una estructura de datos compleja.
Que buen curso, aprendi un monto con los ejercicios de Playground!!
""" Loops """matriz =[[34,82,-21],[-1,73,-48],[59,0.3,13]]for i inmatriz:print(i)for i inmatriz:for j ini:print(j)print(matriz[0][2])print("-"*35)matriz_2 =[[1,2,3],[4,5,6],[7,8]]for i inmatriz_2:print(i)for row inmatriz_2:for column inrow:print(column)
Practicando un poco más:
def run(): super_list =[{"firstname":"Fabián","lastname":"Beltran"},{"firstname":"Maria","lastname":"Rivera"},{"firstname":"Karen","lastname":"Agredo"},{"firstname":"Zury","lastname":"Beleño"},{"firstname":"Yuliza","lastname":"Mujica"}] super_dict ={"natural_nums":[1,2,3,4,5],"integer_nums":[-1,-2,0,1,2],"floating_nums":[1.1,4.5,6.43,5.86]}for key,value in super_dict.items():print(key," - ", value)print("\n===========================================\n")for a insuper_list:for k,v in a.items():print(k," - ", v)print("\n===========================================\n")for a insuper_list:print(f'{a["firstname"]} {a["lastname"]}')if __name__ =='__main__':run()
¿La lista que contiene listas también puede ser denominado o llamado tensor?
Un tensor es mas bien una lista de matrices, pero se puede llamar un tensor de rank 0,1,2 o 3.
siempre lo mas complejo fue los bucles pero con practica se puede :)
Simplificación de los ciclos anidados usando comprensión de listas:
Python tiene una característica poderosa llamada comprensión de listas que te permite crear nuevas listas basadas en las existentes de una manera muy concisa. Puedes usar la comprensión de listas para simplificar tus ciclos anidados.
nueva_lista = [elemento for sublista in lista_de_listas for elemento in sublista]
print(nueva_lista)
Gracias! veo estudiantes que usan eso aún cuando el curso no lo ha explicado (de momento supongo) y no sabía qué era!
No es recomendable anidar ciclos para matrices grandes, para mayor referencia ver la teoría de la notación Big O y las mejores prácticas para el diseño de algoritmos.
conocer esto es bueno, aunque no siempre lo vamos a utilizar.
Estoy impresionado con este concepto de matrices. Ahora toca implementarlo.
Aqui un ejemplo basico utilizando ciclos anidados.
Tabla de multiplicacion del 1 al 10.
for i inrange(1,11): # Ciclo exterior que itera sobre los números del 1 al 10for j inrange(1,11): # Ciclo interior que itera sobre los números del 1 al 10 resultado = i * j # Multiplicamos los números i y j
print(f"{i} x {j} = {resultado}") # Imprimimos el resultado
se que no tiene nada que ver pero lo quise hacer también en código php.
instructor una pregunta porque cuando yo hago el mismo ejercicio no me ejecuta la misma informacion que a usted
[1, 2, 3]
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
7
8
9
solo lo hace con el ultimo registro
Hola, jum que raro si haces el código exactamente igual debería funcionar sin mayor complicación, quieres compartirme tu código para revisar?
una consulta como hace pyton para saber que el for es anidado o no o que un if es anidado si no tiene como tal un cierre del ciclo esto me confunde bastante ya que vengo acostrumbrado a una programacion como la de java que se abren los ciclos y se cierran { }
Es la magia de la identación, el segundo 'for' tiene identación, por lo tanto, esta dentro del alcance del primero. Espero te resuelva la duda