<jupyter_start><jupyter_text>**CONTINUACIÓN DE CICLOS**---**Ciclo FOR - Bucle FOR**<jupyter_code>for i in range (1,5):
  print (i)<jupyter_output>1
2
3
4<jupyter_text>Para dejar claro las partes que componen el bucle FOR, vamos a dejar claro las siguientes definiciones:1. *Iterable:* Como los objetos que pueden ser iterados. Por ejemplo: una lista, un valor tipo cadena, etc.2. *Iterador:* Son objetos que hacen referencia a un elemento (Para hacer referencia a cada uno de los elementos, hay un método denominado "next" que permite hacer referencia a los elementos del conjunto.)**for  in :**   ****Algunos ejemplos de iterables en Phyton son las listas, cadenas, diccionarios, tuplas, etc.**¿Cómo saber que es iterable a la hora de programar?**Podemos darnos cuenta que es iterable usando la función que se escribe isinstance().<jupyter_code>#Paquete Iterable de Collections (Python 3.7) kernel
from collections import Iterable
#Ejemplo
lista= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a= "computador"
b= 14
print (isinstance(lista, Iterable))
print (isinstance(a, Iterable))
print (isinstance(b, Iterable))

#No va a correr porque no puedo iterar un solo elemento y va a aparecer error
a=30
for i in a:
  print(i)<jupyter_output><empty_output><jupyter_text>Para entender los "iteradores", es importante conocer la función *iter()*, esta función puede ser llamada sobre un objeto que sea iterable, y nos devolverá un iterador<jupyter_code>#Ejemplo
lista= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
ref= iter(lista)
print(ref)
print(type(ref))<jupyter_output><list_iterator object at 0x7f9dd1ac98d0>
<class 'list_iterator'><jupyter_text>Al imprimir ref, es un iterador de la clase list_iterator. Lo cual hace referencia a la lista original y nos permite acceder a sus elementos con la función *next()*.**Nota:** Cada vez que llamemos a next() sobre Ref, nos devuelve el siguiente elemento de la listsa original.<jupyter_code>#Ejemplo
lista= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
ref= iter(lista)
print(next(ref))
print(next(ref))
print(next(ref))
print(next(ref))
print(next(ref))
print(next(ref))
print(next(ref))<jupyter_output>1
2
3
4
5
6
7<jupyter_text>**Tener en cuenta**Existen otros iteradores para las diferentes clases1. str_iterator para cadenas2. list_iterator para listas3. set_iterator para conjuntos4. dict_keyiterator para diccionarios **For anidados**---Es posible anidar los for, es decir ingresar uno dentro de otro, como lo vemos a continuación.<jupyter_code>#Vamos a crear una lista de listas, lo cual conforma una especie de matriz. Recordemos que una matriz se compone de valores que se distribuyen en filas y columnas
qa=[[1,2,3],
    [3,4,5],
    [7,8,9]]

for i in qa:
  print(i)

for i in qa:
  for j in i:
    print(j)<jupyter_output>[1, 2, 3]
[3, 4, 5]
[7, 8, 9]
1
2
3
3
4
5
7
8
9<jupyter_text>Si queremos acceder a cada elemento individualmente, se procede a realizar un blucle de FOR anidado. Es decir un for se encargará de iterar las columnas y el otro las filas.<jupyter_code>#Otra forma de utilizar sólo el for es la iteración al revés. Es decir que se puede iterar la lista desde el último al primer elemento.
lista= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
for i in lista[::-1]:
  print(i)
lista= [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
for i in lista[::2]:
  print(i)
print("----------------")
a= "computador"
for i in a[::2]:
  print(i)
#Usando rangos
for i in range (20):
  print(i)
#El range () genera una secuencia de números que van desde 0 por defecto hasta el número que se pasa como parámetro menos 2.
#Estructura: range (número inicio, número final, número salto para lectura de la iteración)
print(list(range(2, 10, 2)))<jupyter_output>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[2, 4, 6, 8]<jupyter_text>**Listas de comprehensión**----Estas nos permiten crear listas de elementos en una sola linea de código.Ejemplo: Crear una lista de las potencias a la 3 de los números impares de 0 a 9<jupyter_code>tres=[i**3 for i in range (1,10,2)]
#1, 3, 5, 7, 9
print(tres)

tres=[]
for i in range (1,10,2):
  tres.append(i**3)
  #append añadidura de elementos en operaciones
  print(i)
s=[1 for i in range(10)]
print(s)
lwa=[5,10,15,20,25,30]
lwa2=[i/5 for i in lwa]
print (lwa2)
#Añadiendo condicionales (valor cadena)
pera = "Mama ama a ema"
pera2 = [i for i in pera if i=="m"]
print(pera2)

#Añadiendo condicionales (valor cadena)
pera = "Mama ama a ema"
pera2 = [i for i in pera if i=="a"]
print(pera2)

print (len(pera2))<jupyter_output>['a', 'a', 'a', 'a', 'a', 'a']
6
{'fraction_non_alphanumeric': 0.11687150837988827, 'fraction_numerical': 0.04357541899441341, 'mean_word_length': 4.812987012987013, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '454687', 'license': 'MIT', 'n_tokens_mistral': 1846, 'n_tokens_neox': 1767, 'n_words': 667, 'path': 'Clase_5_MD_.ipynb', 'repo_name': 'nacarrillor/MDigital', 'size': '4475'}