No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Ciclos anidados

36/38
Recursos

¿Qué es un ciclo anidado y cómo se usa en Python?

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:

matriz = [
    [1, 2, 3],  # Fila 1
    [4, 5, 6],  # Fila 2
    [7, 8, 9]   # Fila 3
]

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 columna
elemento = 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!

Aportes 50

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

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 in matriz:
	print(row)
	for column in row:
		print(column) 

'''print
[1, 2, 3]
1
2
3
[4, 5, 6]
4
5
6
[7, 8, 9]
7
8
9
'''

Un reto divertido, espero les guste:

El código:

def anidado_uno():
    for row in range(1, 12):
        a = ''
        for x in range(1, row):
            a = a + 'x'
        print(a)


def anidado_dos():
    for row in range(1, 12):
        a = 12 - row
        toPrint = ''
        for _ in range(1, a):
            toPrint = toPrint + 'x'
        print(toPrint)


def run():
    anidado_uno()
    print('=='*8)
    anidado_dos()


if __name__ == '__main__':
    run()

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 in matriz:
  print(row)
  for column in row:
    print(column)

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.

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 in matriz:
  print(i)

for i in matriz:
  for j in i:
    print(j)
print(matriz[0][2])

print("-" * 35)
matriz_2 = [
  [1,2,3],
  [4,5,6],
  [7,8]
]
for i in matriz_2:
  print(i)

for row in matriz_2:
  for column in row:
    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 in super_list:
        for k,v in a.items():
            print(k, " - ", v)


    print("\n===========================================\n")

    for a in super_list:
        print(f'{a["firstname"]} {a["lastname"]}')


if __name__ == '__main__':
    run()
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**. lista\_de\_listas = \[\[1, 2, 3], \[4, 5, 6], \[7, 8, 9]] nueva\_lista = \[elemento for sublista in lista\_de\_listas for elemento in sublista] print(nueva\_lista) ![](https://static.platzi.com/media/user_upload/image-6abb86ee-b3c5-49a3-9371-924d88c1bf86.jpg)

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 in range(1, 11):  # Ciclo exterior que itera sobre los números del 1 al 10
    for j in range(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.

$arra = [
    [14, 5, 7],
    [18, 4, 1],
    [19, 5, 2]
];

for ($i=0; $i < count($arra) ; $i++) { 
    for ($a=0; $a < count($arra) ; $a++) {
        echo $arra[$i][$a]."<br>";
    }
}
El método foreach es muy práctico para recorrer cada parte de la matriz, diferenciando el iterador.
matriz = \[ \[1, 2, 3], \[4, 5, 6], \[7, 8, 9] ] '''print(matriz\[0]) print(matriz\[0]\[1]) ''' for row in matriz: print(row) for column in row: print(column)
Busqué un ejemplo para entenderlo un poco mejor idiomas = \['Árabe', 'Inglés', 'Francés', 'Español'] índice = 0 for idioma in idiomas: print ('Este idioma está en la lista: ' + idiomas\[índice]) índice += 1
![](https://static.platzi.com/media/user_upload/Matriz%20Cycles%20py-ceb26d2b-0616-484e-8cc6-605cf2e6a5a1.jpg)
Dejenme acotar algo aqui por favor. En C las matrices se definen en filas[i] y columnas[j] , una vez entendido esto podemoas definir una matriz como un arreglo de mas de una dimensión matriz 2x2 esto sería cuadrada, pero tambien matriz 3 x 4 (3 filas x 4 columnas) (12 posiciones a encontrar) asi que podemos recorrerlas asi matriz[i][j] entonces si deseas encontrar la columna 1 y la fila 2 esto seria matriz[2][1]. Ahora en el FOR sería... primero las filas for(i=0;i<2;i++) { bloque de código... ...y el for para las columnas anidado dentro del bloque. for(j=0;j<3;j++) { bloque de codigo anidado } si tuvieramos datos en ella, al imprimir, podrïa salir algo asi como: 1 2 3 4 5 6 7 8 9 10 11 12 Pero veo que en pyton es diferente. Si deseas imprimir los valores de las columnas te salen los mismos valores de filas pero en columnas. si fuera este ejemplo saldria en posicion 0 para columnas... 1 2 3 4 lo cual no es congruente, lo ideal es que saliera... 1 5 9 Asi que nada, es cuestión de identificar cómo los trabaja Python para poder trabajar pivotes, pivotes en diagonales, hacer un juego como tic tac toe o el del ahorcado y muchas otras operaciones con datos en las tablas o saber manipular los datos.
En la clase de variables, recordemos que una de las recomendaciones, es que las variables se llamen o hagan referencia con el tipo de dato o información con el que se trabaja: row, column, item de esta manera es más sencillo comprender por ejemplo en el caso de los loops que es lo que representa cada uno de estos.

falto la clase de los conjuntos

for row in matriz:
    for column in row:
        print(column, end = " ")
    print()
matriz = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print(matriz)       # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matriz[0])    # [1, 2, 3]
print(matriz[1])    # [4, 5, 6]
print(matriz[2])    # [7, 8, 9]
print(matriz[0][0]) # 1
print(matriz[1][2]) # 6
print(matriz[2][1]) # 8
Genial la explicación!

# Primer ciclo: Abre la caja grande (3 veces)
for caja_grande in range(3):
    # Segundo ciclo: Abre la cajita pequeña dentro de la caja grande (2 veces)
    for cajita_pequeña in range(2):
        # Tercer ciclo: Cuenta las piezas de LEGO en la cajita pequeña (5 veces)
        for pieza_de_lego in range(5):
            print("¡Encontré una pieza de LEGO!")

# ¡Has contado todas las piezas de LEGO!

Deseas ser :
'Tijera’
ecribe s, ó n,
y
tu turno…Tijera

el juego… Papel

GANASTE¡¡¡

import random
i = 0
coin = True

while coin:
  element = [
      ["Piedra", "Papel", "Tijera"],
      [0, 1, 2],
      ]
  select = input("Deseas ser :\n'"+ element[0][i]+"' \necribe s, ó n, \n").lower()
  
  if select == "s" or select == "si" or select == "y" or select == "yes":
    player = element[1][i]

    print("tu turno.........."+ element[0][i] )
    print("")
    pc = random.choice(element[1])
    print("\nel juego..........",element[0][pc] )
    print("")
    if player == pc:
      print(" => EMPATE <= ")
      nuevo = input("\nnuevo juego  \necribe s, ó n, \n").lower()
      if nuevo == "s" or nuevo == "si" or nuevo == "y" or nuevo == "yes":
        print("\nnueva partida ")
        continue
      else:
        print("\ncerrando juego ")
        coin = False
        break
    if player - 1 == pc or player + 2 == pc:
      print(" GANASTE¡¡¡ ")
      nuevo = input("nuevo juego  \necribe s, ó n, \n").lower()
      if nuevo == "s" or nuevo == "si" or nuevo == "y" or nuevo == "yes":
        print("\nnueva partida ")
        continue
      else:
        print("\ncerrando juego ")
        coin = False
    else:
      print("SUERTE PARA LA PROXIMA...")
      nuevo = input("nuevo juego  \necribe s, ó n, \n").lower()
      if nuevo == "s" or nuevo == "si" or nuevo == "y" or nuevo == "yes":
        print("\nnueva partida ")
        continue
      else:
        print("\ncerrando juego ")
        coin = False

  else:
    i += 1
    if i == 3:
      i = 0

Un ejemplo de loop anidado

for i in range(1, 13):  # Loop exterior para las filas (del 1 al 10)
    for j in range(1, 13):  # Loop interior para las columnas (del 1 al 10)
        resultado = i * j
        print(f"{i} x {j} = {resultado}")
    print('\n ')

import random

while True:
    print("¡Juguemos a ... Piedra, papel o tijera!")
    print("1) Piedra\n2) Papel\n3) Tijera")
    
    # Ingreso de opción para el usuario
    user_option = int(input("¿Cuál es tu opción? (Ingresa el número correspondiente): "))
    
    option_tuple = (1, 2, 3)
    
    # Ingreso de opción de la computadora (número aleatorio del 1 al 3)
    computer_option = random.choice(option_tuple)
    
    # Computadora saca esta opción.
    print("La computadora saca:", computer_option)
    
    # Evaluamos con if
    if user_option == computer_option:
        print("¡Empate!, wow, empataste a la computadora")
    elif user_option == 1 and computer_option == 2:
        print("¡Pierdes!... Computadora saca papel, papel envuelve piedra.")
    elif user_option == 1 and computer_option == 3:
        print("¡Ganas!... Computadora sacó tijera, piedra rompe tijera.")
    elif user_option == 2 and computer_option == 1:
        print("¡Ganas!... Computadora sacó piedra, papel envuelve a la piedra.")
    elif user_option == 2 and computer_option == 3:
        print("¡Pierdes!... Computadora 1sacó tijera, tijera rompe papel.")
    elif user_option == 3 and computer_option == 1:
        print("¡Pierdes!... Computadora sacó piedra, piedra rompe tijera.")
    elif user_option == 3 and computer_option == 2:
        print("¡Ganas!... Computadora sacó papel, tijera rompe papel.")
    else:
        print("Elige una opción válida, ¡inténtalo de nuevo!")
    
    play_again = input("¿Quieres jugar de nuevo? (s/n): ")
    
    if play_again.lower() != 's':
        print("Gracias por jugar. ¡Hasta luego!")
        break

Algo divertudi que se puede hacer.

x = 0
for row in range(1,12):
    x += 1
    col = "x" * row
    print(col)
    
y = 12
for colum in range(1, 12):
    y -= 1
    col = "x" * y
    print(col)

No termino entendiendo mucho las explicaciones.

muy buena clase

matriz = [[1,2,3],[‘Maria’,‘Luis’,‘Andrés’],[25.6,16.5,32.8]]

counter = 1
for fila in matriz:
for columna in fila:
print("Fila ",counter, “=>”, columna)
counter +=1

matriz = [[1,2,3],[4,5,6],[7,8,9]]
print(matriz)
print(matriz[0])

for fila in matriz:
print(fila)
for columna in fila:
print(columna)

matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]
print(matrix[0][1])

for row in matrix:
  print(row)
  for column in row:
    print(column)

En el ejemplo de la clase pasada, donde teníamos una lista y dentro de ella varios diccionarios, yo anide un bucle for para imprimir los valores, aquí los dejo el código:

people = [
  {
    'name': 'Manuel',
    'age': 12
  },
  {
    'name': 'Juan',
    'age': 10
  },
  {
    'name': 'Pedro',
    'age': 15
  },
]

for person in people:
  for key, value in person.items():
    print(f"{key}: {value}")

Los ciclos anidados en Python son una técnica de programación que consiste en utilizar un ciclo dentro de otro ciclo. Esto permite realizar operaciones más complejas al procesar estructuras de datos que tienen varias dimensiones, como matrices, listas de listas, entre otras.

Resumen de una venta de artículos utilizando for anidados. Esto se podía resolver con un solo for, pero el código no queda tan legible a comparación de cuando utilizamos for anidados.

#iteracion de tablas o matrices
matriz = [
  [1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9]
]
f=1
for fila in matriz:
  c=1
  for e in fila:
    print('fila',f,'columna',c,f'[{e}]')
    c+=1
  f+=1
# fila 1 columna 1 [1]
# fila 1 columna 2 [2]
# fila 1 columna 3 [3]
# fila 2 columna 1 [4]
# fila 2 columna 2 [5]
# fila 2 columna 3 [6]
# fila 3 columna 1 [7]
# fila 3 columna 2 [8]
# fila 3 columna 3 [9]

Para que salga en forma de matriz:

for element in matriz:
  # print(element)
  
  for item in element:
    if element.index(item)==2:
      print(item)
    else:
      print(item, end=" ")
    
#Ciclos anidados

matriz=[[1,2,3],
        [4,5,6],
        [7,8,9]]

print(matriz[0][1])

for elemento in matriz:
    print(elemento)
    for element in elemento:
        print(element)
def superposicion (list1, list2): # Toma dos listas
    for item in list1: # Cicla por los objetos de la lista 1
        for item2 in list2: # Cicla por los objetos de la lista 2
            if item == item2: # Compara el objeto actual del ciclado de la lista 1 con el objeto actual de la lista 2 si son iguales sigue la sentencia
                return True # Devuelve verdadero (que el objeto esta duplicado)
    return False # Se termina el bucle y si no hay ningún objeto duplicado devuelve falso

Imprime tablas de multiplicar

for tabla in range(1, 11):
print(’-------------------------------’)
input(‘Pulsa enter para siguiente tabla ‘)
print(’-------------------------------’)
print(‘Tabla del’, tabla)
print(’-------------------------------’)

for i in range(1, 11):
    print( tabla, '*', i, '=', i*tabla)      
matriz = [ [1,2,3], [4,5,6], [7,8,9]]
print (matriz [0][0]);print(matriz [0][1]);print(matriz [0][2]);print(matriz [1][0]);print(matriz [1][1]);print(matriz [1][2]);
for row in matriz: print(row)
for col in row: print(col)
matriz = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]
print(matriz[0][1])

for row in matriz:
  print(row)
  for column in row:
    print(column)

matriz = [
[1,2,3],
[4,5,6],
[7,8,9]
]
print(matriz[0][1])

Me pareció más entendible imprimir los ejemplos de esta forma, espero les sirva: ![](https://static.platzi.com/media/user_upload/imagen-83538ad4-3356-4480-94b1-86d572aedd11.jpg) ![](https://static.platzi.com/media/user_upload/imagen-817f4242-da58-44e8-a1c1-d79b4c61075e.jpg) ![](https://static.platzi.com/media/user_upload/imagen-d4cc5fd5-0b8b-4942-b73c-b38472f8f552.jpg) ![](https://static.platzi.com/media/user_upload/imagen-31f03ec3-6bc8-474c-bbee-ebede9981f4f.jpg) ![](https://static.platzi.com/media/user_upload/imagen-b9d83d06-532a-4791-bfb4-76556ef4e13d.jpg)