CursosEmpresasBlogLiveConfPrecios

Iteradores

Clase 12 de 21 • Curso Profesional de Python

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    ¿Qué necesitas saber para tomar el curso?

    ¿Qué necesitas saber para tomar el curso?

    03:15
  • 2
    ¿Cómo funciona Python?

    ¿Cómo funciona Python?

    07:49
  • 3
    Cómo organizar las carpetas de tus proyectos

    Cómo organizar las carpetas de tus proyectos

    07:15
Static Typing
  • 4
    ¿Qué son los tipados?

    ¿Qué son los tipados?

    10:26
  • 5
    Tipado estático en Python

    Tipado estático en Python

    14:26
  • 6
    Practicando el tipado estático

    Practicando el tipado estático

    13:33
Conceptos avanzados de funciones
  • 7
    Scope: alcance de las variables

    Scope: alcance de las variables

    06:32
  • 8
    Closures

    Closures

    08:21
  • 9
    Programando closures

    Programando closures

    07:00
  • 10
    Decoradores

    Decoradores

    06:19
  • 11
    Programando decoradores

    Programando decoradores

    13:05
Estructuras de datos avanzadas
  • 12
    Iteradores

    Iteradores

    13:52
  • 13
    La sucesión de Fibonacci

    La sucesión de Fibonacci

    14:01
  • 14
    Generadores

    Generadores

    07:22
  • 15
    Mejorando nuestra sucesión de Fibonacci

    Mejorando nuestra sucesión de Fibonacci

    06:53
  • 16
    Sets

    Sets

    10:58
  • 17
    Operaciones con sets

    Operaciones con sets

    06:09
  • 18
    Eliminando los repetidos de una lista

    Eliminando los repetidos de una lista

    05:20
Bonus
  • 19
    Manejo de fechas

    Manejo de fechas

    08:44
  • 20
    Time zones

    Time zones

    08:46
Conclusión
  • 21
    Completaste la trilogía. ¿Cómo seguir?

    Completaste la trilogía. ¿Cómo seguir?

    01:30
    César Alejandro Martínez Ortíz

    César Alejandro Martínez Ortíz

    student•
    hace 4 años

    Qué mágico momento fue el de la explicación del funcionamiento interno del ciclo for! Probablemente ha sido de mis momentos favoritos de la trilogía de FacMartoni

      Esteban Blanco Ortuno

      Esteban Blanco Ortuno

      student•
      hace 4 años

      Es muy interesante, también me ha gustado.

      Luis Alejandro Vera Hernandez

      Luis Alejandro Vera Hernandez

      student•
      hace 4 años

      Ah si, muy interesante lo del ciclo for y como funciona internamente

    Juan Roberto González León

    Juan Roberto González León

    student•
    hace 4 años
    CICLOFOR.jpg
    EL CLICLO FOR NO EXISTE
      Andrés Cardona

      Andrés Cardona

      student•
      hace 4 años

      jajajajajajajaja tal cual mi reacción!

      Jesús Enrique Morocoima Marcano

      Jesús Enrique Morocoima Marcano

      student•
      hace 4 años

      jajajajajaja

    Miguel Angel Reyes Moreno

    Miguel Angel Reyes Moreno

    student•
    hace 4 años

    Estructuras de datos avanzadas

    Iteradores

    Antes de entender qué son los iteradores, primero debemos entender a los iterables.

    Son todos aquellos objetos que podemos recorrer en un ciclo. Son aquellas estructuras de datos divisibles en elementos únicos que yo puedo recorrer en un ciclo.

    Pero en Python las cosas no son así. Los iterables se convierten en iteradores.

    Ejemplo:

    # Creando un iterador my_list = [1,2,3,4,5] my_iter = iter(my_list) # Iterando un iterador print(next(my_iter)) # Cuando no quedan datos, la excepción StopIteration es elevada

    # Creando un iterador my_list = [1,2,3,4,5] my_iter = iter(my_list) # Iterando un iterador while True: #ciclo infinito try: element = next(my_iter) print(element) except StopIteration: break

    Momento impactante: El ciclo "for" dentro de Python, no existe. Es un while con StopIteration. 🤯🤯🤯

    my_list = [1,2,3,4,5] for element in my_list: print(element)

    evenNumbers.py:

    class EvenNumbers: """Clase que implementa un iterador de todos los números pares, o los números pares hasta un máximo """ #* Constructor de la clase def __init__(self, max = None): #self hace referencia al objeto futuro que voy a crear con esta clase self.max = max # Método para tener elementos o atributos que voy a necesitar para que el iterador funcione def __iter__(self): self.num = 0 #Primer número par #* Convertir un iterable en un iterador return self # Método para tener la función "next" de Python def __next__(self): if not self.max or self.num <= self.max: result = self.num self.num += 2 return result else: raise StopIteration

    Ventajas de usar iteradores:

    1. Nos ahorra recursos.
    2. Ocupan poca memoria.
      Javier Suárez Meerhoff

      Javier Suárez Meerhoff

      student•
      hace 4 años

      gracias!

      Mauricio Gonzalez Falcon

      Mauricio Gonzalez Falcon

      student•
      hace 4 años

      Gracias por el resumen!

    Jesús Velázquez Jiménez

    Jesús Velázquez Jiménez

    student•
    hace 4 años

    Iterables aquellas estructuras de datos divisibles en elementos únicos que se pueden recorrer en un ciclo.

    Todos los iterables pueden convertirse en iteradores para poder ser recorridos en un ciclo.

    ¡El ciclo for no existe!

    Es un alias de un ciclo While infinito con un Try except que controla el Error StopIteration

    Construir un iterador desde cero en Python.

    Solo tenemos que implementar los métodos

    __iter__() : "El método __iter__() devuelve el objeto iterador en sí. Si es necesario, se puede realizar alguna inicialización." __next__(): "El método __next__() debe devolver el siguiente elemento de la secuencia.Al llegar al final, y debe subir el error StopIteration."

    Ventajas:

    Es una expresión que explica con obtener el resultado. Por ello ahorra la memoria y aumenta la velocidad.

      Javier Suárez Meerhoff

      Javier Suárez Meerhoff

      student•
      hace 4 años

      gracias!

    Carlos Esteban Lara Gil

    Carlos Esteban Lara Gil

    student•
    hace 4 años

    APUNTES de la clase :snake:

    Los iteradores son estructuras de datos divisibles en elementos únicos que puedo recorrer en un ciclo.

    • Cuando hacemos un ciclo, python no está iterando(internamente). Lo que sucede es que ese iterable se convierte en un objeto especial el cual se llama iterador
    my_list = [1,2,3] my_iter= iter(my_list) #iterando un iterador print(next(my_iter)) #Cuándo no quedan datos la excepción StopIteration es elevada
    1. iter convierte un iterable en un iterador
    2. Una vez que se hace, se usa al next() para ir al siguiente elemento del iterador
    3. Cuando ya no quede ningún elemento python imprimirá un error
    # creando un iterador my_list = [1,2,3,4,5,6] my_iter = iter(my_list) #iterando un iterador while True: try: print(next(my_iter)) print(element) except StopIteration: break

    Resultado de aplicar iter sobre nuestra lista y el ciclo while infinito.

    • si usamos while true hará un ciclo infinito

    • Usamos el manejo de errores. Con try usamos el next() para que ejecute el siguiente elemento

    • except para cuando devuelva el error StopIteration el ciclo se corta con un break

    Ciclo for (azúcar sintáctica)

    El ciclo for hace lo mismo que el cico while true. en vez de escribir todo ese código se puede resumir en:

    for element in my_list: print(element)

    el ciclo for no existe en python, lo que hace python es convertir una iterable en un iterador y con un ciclo while recorrerlo hasta encontrar el StopIteration

    ¿Cómo construyo un iterador?

    El protocolo de los iteradores: para construir un iterador, hay que construir una clase que contenga dos métodos importantes:

    __iter__() y __next__()
    class EventNumber: """ Clase que implementa un iterador de todos los números pares, o los números pares hasta un máximo.""" def __init__(self,max=None): self.max = max def __iter__(self): self.num = 0 return self def __next__(self): if not self.max or self.num <= self.max: result= self.num self.num += 2 return result else: raise StopIteration
    • __ iter __(): retorna al objeto al en sí mismo. Convierte un iterable en un iterador.

    • _ next __(): Convierte a la función next. Nos permite extraer cada uno de los elementos del iterador

    Con los iteradores trabajamos más rápido y ahorramos memoria

    ventajas de usar iteradores

    Es una expresi+on que exlica como obtener el resultado. También ahorra memoria y es más rápido

      Elias Dudamel

      Elias Dudamel

      student•
      hace 4 años

      Excelente apuntes!!!

    Juan Carlos Ortiz Romero

    Juan Carlos Ortiz Romero

    student•
    hace 4 años

    ⭐️⭐️⭐️⭐️⭐️ El ciclo “for” dentro de Python no existe. Es realmente un while con StopIteration. ⭐️⭐️⭐️⭐️⭐️

    Rodrigo Torres

    Rodrigo Torres

    student•
    hace 4 años

    Si lees esto, pasaste la mitad del curso !! Animo, falta poco!!

    Ángel Yasmani Viñamagua Cuenca

    Ángel Yasmani Viñamagua Cuenca

    student•
    hace 4 años

    Iterables -> Todos los objetos que podemos recorrer en un ciclo, ejem: una lista, un string Iteradores -> Ahorra recursos, puedo almacenar secuencias y progreciones matematicas, ocupa poca memoria.

    Gabriel Missael Barco

    Gabriel Missael Barco

    student•
    hace 4 años

    Iteradores

    • Un iterator es una estructura de datos para guardar datos infinitos 🤯. Para entenderlo, primero debemos saber que un iterable es todo aquel objeto que puedo recorrer en un ciclo (lista, strings, etc). Un iterable es divisible.

    • Cuando hacemos un ciclo, Python internamente no está recorriendo a ese iterable, si no más bien ese iterable se convierte internamente en un iterador, que si puede ser recorrido. 🤔

    • Para crear un iterador:

      # Creando un iterador my_list = [1, 2, 3, 4, 5] my_iter = iter(my_list) # Se recibe un iterable # Iterando un iterador print(next(my_iter)) # Cuando no quedan datos, la excepción StopIteration es elevada
    • Para que no se rompa el código, hacemos manejo de errores: 🧠

      # Creando un iterador my_list = [1, 2, 3, 4, 5] my_iter = iter(my_list) # Iterando un iterador while True: try: element = next(my_iter) print(element) except StopIteration: break

      Esta es una manera eficiente de extraer todos los elementos de un iterable. De hecho, esta es la manera en la que funciona un ciclo for, es la azúcar sintaxis de este código anterior 😍. El ciclo for en si mismo no existe.

    • ¿Cómo construyo un iterador?. Una opción es castear desde un iterable. Para hacerlo desde cero, debemos usar el protocolo de los iteradores que contiene dos clases importantes __iter__ y __next__:

      class EvenNumbers: """Calse que implementa un iterador de todos los números pares, o los números pares hasta un máximo""" def __init__(self, max = None): self.max = max def __iter__(self): self.num = 0 return self def __next__(self): if not self.max or self.num <= self.max: result = self.num self.num += 2 return self else: raise StopIteration
    • Las ventajas de usar iteradores: Nos ahorra recursos computacionales y de memoria, ya que tenemos una función matemática de como obtener los siguientes elementos, sin necesidad de guardarlos todos 👀.

    Carlos José Tun Pinzón

    Carlos José Tun Pinzón

    student•
    hace 4 años

    Iteradores

    Son una estructura de datos para guardar datos infinitos.

    Los iterables son los objetos que podemos recorrer a través de un ciclo dicho de otra manera, son estructuras de datos divisibles en elementos que puedo recorrer en un ciclo.

    Todos los iterables pueden convertirse en iteradores. De esta manera es que internamente Python los puede recorrer realmente, esto mediante parsing usando el comando iter.

    # Creando un iterador my_list = [1, 2, 3, 4, 5] my_iter = iter(my_list) # Iterando un iterador print(next(my_iter)) # Next nos permite acceder al siguiente elemento del iterador por cada llamada # Cuando no quedan datos, la excepción StopIteration es elevada

    Si queremos crear un código que nos permita recorrer todos los elementos de nuestra lista usando la función next para como aparece en el ejemplo anterior, tendríamos que realizar un bloque try-except:

    # Creando un iterador my_list = [1, 2, 3, 4, 5] my_iter = iter(my_list) # Iterando un iterador while True: try: element = next(my_iter) print(next(my_iter)) # Next nos permite acceder al siguiente elemento del iterador por cada llamada except StopIteration: break # Salimos del ciclo una vez que obtenemos el último valor iterable

    Lo anterior es posible hacerlo de una manera mucho más sencilla, mediante el ciclo for el cual es azúcar sintáctica pues facilita y realiza de una manera mas estética y sencilla una operación:

    my_list = [1, 2, 3, 4, 5] for element in my_list print ("element")

    Es posible crear un iterador personalizado (directamente, sin castear/casting) el cual nos permita recorrer un infinito número de elementos de acuerdo a una función dada, utiliza dos métodos internos importantes: "iter" y "next".

    El uso de una función que determina los valores a iterar nos permite ahorrar memoria y trabajar más rápido, pues no tenemos que almacenar cada uno de los valores, sino solo una función para extraer cada uno de los elementos.

    El siguiente ejemplo crea un iterador que recorre todos los números pares:

    class EvenNumbers: """Clase que implementa un iterador de todos los números pares, o los números pares hasta un máximo que definimos """ # Constructor def __init__(self, max = None): # self = objeto futuro creado con esta clase self.max = max # Método para tener elementos o atributos que voy a necesitar para que el iterador funcione def __iter__(self): self.num = 0 # Primer número par return self # Método para tener la función "next" del ciclo for, es decir, recorrer cada valor. def __next__(self): if not self.max or self.num <= self.max: result = self.num self.num += 2 return result else: raise StopIteration
      Hubert Ronald Mendoza Canales

      Hubert Ronald Mendoza Canales

      student•
      hace 4 años

      Gracias por el aporte, en la línea expuesta en clase:

      class EvenNumbers: # .... def __next__(self): if not self.max or self.num <= self.max: # demas codigo

      ->not self.max es verdadero cuando self.max es None, es decir self.max is None dará verdadero (self.max=None).

      De acuerdo a las recomendaciones de PEP 8 self.max is None es preferida cuando se quiere determinar si es cierto o no que una variable es None El código sugerido sería

      class EvenNumbers: # .... def __next__(self): if self.max is None or self.num <= self.max: # demas codigo
    Marcel Nahir Samur

    Marcel Nahir Samur

    student•
    hace 4 años

    Por si alguno se pregunta como usar clases para construir iteradores, aquí va:

    Primero se define la clase con sus 3 métodos fundamentales

    class EvenNumbers: """Clase que implementa un iterador de todos los números pares, o los números pares hasta un máximo """ #* Constructor de la clase def __init__(self, max = None): #self hace referencia al objeto futuro que voy a crear con esta clase self.max = max # Método para tener elementos o atributos que voy a necesitar para que el iterador funcione def __iter__(self): self.num = 0 #Primer número par #* Convertir un iterable en un iterador return self # Método para tener la función "next" de Python def __next__(self): if not self.max or self.num <= self.max: result = self.num self.num += 2 return result else: raise StopIteration

    Luego, en nuestro archivo principal, importamos la clase creada con el iterador

    from EvenNumbers import EvenNumbers n = EvenNumbers(18) #Instaciamos un objeto myIter = n.__iter__() #Aplicamos el método __iter__ while True: #ciclo infinito #Utilizamos nuestro for not for try: element = n.__next__() #Llamamos al método __next__ print(element) except StopIteration: break
      Julio Cesar Rodíguez Cristancho

      Julio Cesar Rodíguez Cristancho

      student•
      hace 3 años

      Excelente..Gracias

    Fernando Garcia de la Cruz

    Fernando Garcia de la Cruz

    student•
    hace 4 años

    Hola!!

    Tengo una duda, no he podido encontrar documentación sobre la explicación del for como alias de la estructura con while, ¿este tipo de cosas se infieren por las definiciones de los controles de flujo? o dónde podría comprobarlo?

    Aquí esta el apartado de la docuentación que consulté.

    Tiene todo el sentido del mundo y ha sido muy buena la explicación de Facundo, pero no he podido comprobarlo con otra fuente.

    Muchas gracias!!

      Omar Daniel Centeno

      Omar Daniel Centeno

      student•
      hace 4 años

      Hola

      Es una excelente forma como lo explica facundo y es la explicación que da en la documentación, aunque sin poner que es un ciclo while. Fue una excelente forma para poder explicar la diferencia y funcionamiento de los ciclos. Entre más comienzas la búsqueda no todo es tan sencillo pues se involucran funciones cada vez de más bajo nivel.

      Algunas otras formas de construir iteradores la puedes encontrar en este hilo de SO. Puedes aprender más sobre la librería de itertools para crear iteradores eficientes.

      Esa curiosidad te llevará a dominar y entender realmente este fabuloso lenguaje.

      Saludos

      Fernando Garcia de la Cruz

      Fernando Garcia de la Cruz

      student•
      hace 4 años

      Muchas gracias por el comentario y las fuentes Omar @ODCCenteno Saludos!! :)

    Diego Andrés Rojas González

    Diego Andrés Rojas González

    student•
    hace 4 años

    Plantee otra solución para iterar n elementos. Con la ayuda de una función recursiva y un decorador.

    def iterador(func): def wrapper(lista): lista = iter(lista) func(lista) return wrapper @iterador def iterame(lista): try: print(next(lista)) return iterame(lista) except StopIteration: pass iterame('Platzi<3')
    Jhordan Sax Cordova Poma

    Jhordan Sax Cordova Poma

    student•
    hace 4 años

    Aprendimos geniales conceptos del lenguaje Python !!! Cada vez me agrada más.. y que buen profesor!! para hacer entender estos temas.. 🤠🤠

    Luis Fernando Zarazua Aguilar

    Luis Fernando Zarazua Aguilar

    student•
    hace 4 años

    Les comparto como aplicando el concepto de iteradores realice el calculo del número e a través de una suma infinita.

    class NumESum(): def __init__(self, iterations: int): self.iterations = iterations def __iter__(self): self.fact = 1 self.sum = 0 if self.iterations <= 0: self.iterations = -1 self.k = 1 return self def __next__(self): self.sum+=self.k**2/(2*self.fact) # sum(k^2/(2*k!)) from k = 1 to ∞ if self.k > self.iterations: raise StopIteration else: self.k += 1 self.fact=self.fact*self.k return self.sum if __name__ == "__main__": for element in NumESum(100): # Ejecutar el algoritmo con 100 interacciones. print(element)
    Edgar

    Edgar

    student•
    hace 4 años

    Una forma de aplicar la función que el profesor explica con el while infinito es hacer una llamada recursiva a la misma función siempre que no tengamos un error al intentar next().

    def loop_iterador(iterador): iterador = iter(iterador) try: print(next(iterador)) except StopIteration: print('Fin de los elementos del iterador') else: return loop_iterador(iterador)
    David Campos

    David Campos

    student•
    hace 4 años

    Los iteradores son todos aquellos elementos que podemos recorrer en un ciclo. Por ejemplo, una lista, un string o un diccionario.

    Cuando se hace un ciclo, Python internamente no está recorriendo a ese iterable, es decir, el for no funciona directamente como lo vemos en la pantalla, sino que ese iterable se convierte a un objeto especial llamado Iterador. Y es este el que recorre el objeto.

    Lo que hace Python internamente:

    # Creando iterador my_list = [1,2,3,4,5] my_iter = iter(my_list) # Iterando print(next(my_iter)) # Cuando no quedan datos, lavanta la expeción StopIteration

    Una forma de iterar en un conjunto muy grande:

    Un ciclo for no es más que azúcar sintáctica de este proceso. El ciclo for realmente es solo un alias de una iteración.

    my_list = [1,2,3,4,5] my_iter = iter(my_list) while True: try: element = next(my_iter) print(element) except StopIteration: break

    Construir iterador

    El protocolo de los iteradores nos dice que para construir un iterador se necesita una clase que contenga dos métodos: el método iter y el método next .

    class EvenNumbers: """Clase que implementa un iterador de todos los números pares o los números pares hasta un máximo""" def __init__(self, max = None) -> None: self.max = max def __iter__(self): self.num = 0 return self def __next__(self): if not self.max or self.num <= self.max: result = self.num self.num += 2 return result else: raise StopIteration

    El método iter sirve para tener elementos o atributos que se van a necesitar para que el iterador funcione. En este caso, el único atributo necesario son cada uno de los números de esa iteración. Se le asigna el valor inicial de 0 y se retorna al objeto en sí mismo.

    El método next es el que se necesita para tener la función next en Python. Este método permite extraer cada uno de los elementos de iterador. En este caso se coloca la condición "si no se definió un self.max (limite) o el número que se está por recorrer es menor o igual a self.max, se le asigna a la variable result el número de la iteración (self.num). Después se le suma dos a self.num y se retorna. Si la condición se cumple se levanta la excepción Stop Iteration".

    Ventajas de usar iteradores

    • Ahorra espacio al poder almacenar secuencias matemáticas infinitas de forma teórica.
    • Ocupan poca memoria.
    Gary Torres Martínez

    Gary Torres Martínez

    student•
    hace 4 años

    Una duda, ¿Usar dunder en esos métodos es para evitar el llamado explícito del mismo y que ellos sean ejecutados con solo instanciar un objeto?

      Yair Hernández

      Yair Hernández

      student•
      hace 4 años

      Aunque en general no es buena práctica llamarlos explícitamente, Python no te impide llamar explícitamente un método con dunder.

      En el ejemplo de la clase EvenNumbers, los tres métodos con dunder que se utilizan (__init__, __iter__, __next__) pertenecen a lo que en la documentación de Python llaman métodos especiales. Estos permiten personalizar métodos u operaciones al definir una clase.

      Recuerda que si tienes un objeto, puedes convertirlo en iterador usando iter(mi_objeto); al inicio de esta clase se pone como ejemplo

      my_list = [1,2,3,4,5] my_iter = iter(my_list)

      Sin embargo, no cualquier objeto se puede convertir en iterador:

      >>> class MiClase: ... pass ... >>> instancia = MiClase() >>> iter(instancia) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'MiClase' object is not iterable

      En el caso de la clase EvenNumbers, sí podemos hacerlo porque hemos definido un método __iter__:

      >>> otra_instancia = EvenNumbers(4) >>> iterador = iter(otra_instancia)

      En la segunda línea, el intérprete de Python verifica si el objeto otra_instancia tiene un método exactamente con el nombre __iter__, y lo invoca. Del mismo modo, cuando utilizamos next, el intérprete verifica que se haya definido un método llamado (exactamente como) __next__ y lo invoca:

      >>> next(iterador) 0 >>> next(iterador) 2

      Retomando la parte que mencionaba anteriormente sobre que Python no impide invocar un método con dunder, podrás ver que hacerlo te da el mismo resultado:

      >>> otra_instancia2 = EvenNumbers(6) >>> iterador2 = otra_instancia2.__iter__() >>> iterador2.__next__() 0 >>> iterador2.__next__() 2
      Cesar Hernández Ramírez

      Cesar Hernández Ramírez

      student•
      hace 4 años

      Increíble explicación @yhdz

    Mateo Gonzales Navarrete

    Mateo Gonzales Navarrete

    student•
    hace 4 años

    Por lo que veo en los comentarios, hay un gran asombro por lo explicado respecto a que el ciclo for no es más que un alias para un while más complejo. Sin embargo, a pesar de ser una buena explicación como método pedagógico, se encuentra lejos de la realidad. De hecho, claro que existen los ciclos for en Python y no son azúcar sintáctica para un while del mismo lenguaje. En Python, los ciclos for son transpilados a lenguaje C (cosa que no ocurre con los ciclos while), por lo que son mucho más eficientes que un ciclo while. Una explicación simple puede ser encontrada en este video de Youtube. Y pueden probar el siguiente código en sus máquinas, viendo que el ciclo for es bastante más rápido que el while (implicando que no puede ser solo azúcar sintáctica).

    # for.py from timeit import default_timer as timer from datetime import timedelta def main(): start = timer() for i in range(100000000): pass end = timer() print(timedelta(seconds=end - start)) if __name__ == "__main__": main()
    # while_iter.py from timeit import default_timer as timer from datetime import timedelta start = timer() def main(): my_list = range(100000000) my_iter = iter(my_list) start = timer() while True: try: element = next(my_iter) except StopIteration: break end = timer() print(timedelta(seconds=end - start)) if __name__ == "__main__": main()
    # while.py from timeit import default_timer as timer from datetime import timedelta start = timer() def main(): start = timer() i = 0 while i < 100000000: i += 1 end = timer() print(timedelta(seconds=end - start)) if __name__ == "__main__": main()
      David Zhou Yang

      David Zhou Yang

      student•
      hace 3 años

      Muy interesante! Gracias por el aporte

    David Pedroza Segoviano

    David Pedroza Segoviano

    student•
    hace 4 años

    TSSSSSSSAAAAAAAAAAALAAAAAA que no existen los for jajajajaja 🤯🤯🤯

      Gabriel Missael Barco

      Gabriel Missael Barco

      student•
      hace 4 años

      JAJAJAJAJAJAJ hola panita, justo así me quedé 🤡🤡🤡🤡

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads