<jupyter_start><jupyter_text>Data Science Bootcamp - The Bridge  PrecursoEn este notebook vamos a ver, uno a uno, los conceptos básicos de Python. Constarán de ejercicios prácticos acompañados de una explicación teórica dada por el profesor.Los siguientes enlaces están recomendados para el alumno para profundizar y reforzar conceptos a partir de  ejercicios y ejemplos:- https://facundoq.github.io/courses/aa2018/res/02_python.html- https://www.w3resource.com/python-exercises/- https://www.practicepython.org/- https://es.slideshare.net/egutierrezru/python-paraprincipiantes- https://www.sololearn.com/Play/Python- https://github.com/mhkmcp/Python-Bootcamp-from-Basic-to-AdvancedEjercicios avanzados:- https://github.com/darkprinx/100-plus-Python-programming-exercises-extended/tree/master/Status (++)- https://github.com/mahtab04/Python-Programming-Practice (++)- https://github.com/whojayantkumar/Python_Programs (+++)- https://www.w3resource.com/python-exercises/ (++++)- https://github.com/fupus/notebooks-ejercicios (+++++)Tutor de ayuda PythonTutor:- http://pythontutor.com/  1. Variables y tipos Cadenas<jupyter_code># Entero - Integer - int el nombre (parte izquierda) que le pongas es simplemente una etiqueta nada más 
x = 7
# Cadena - String - Lista de caracteres. Tb es una Coleccion
x = "lorena"
print(x)
x = 7
print (x)


# built-in (funcion construida en python) lee y ejecuta la ultima linea 
type (x)
x = 5
y = 7

z = x + y
print(z)
print(type(z))
x = "'lorena'\" "
l = 'silvia----'
p="'Pablo' "
g = x + l + p
# Las cadenas (str) se concatenan
print(g)
print(p)
print(g)
# type muestra el tipo de la variable
type(g)
type(3)
# si pones una "letra" o un numero te lo lee como tal
type("a")
# print es una función que recibe varios argumentos y cada argumento está diferenciado por la coma. Después de cada coma, la función 'print' añade un espacio.

# mala praxis
print(    g,z  ,    6,     "cadena")

# buena praxis - PEP8 (dejar un espacio despues de las comas)

print(g, z, 6, "cadena")
print(g, p, "pedo")
# Cambiar de int a str
#built-in
x=6 #asignar un numero entero a x
print(x) #ejecuto
print(type(x)) #luego que nos lea que tipo es esa x poniendo la x o la variable que previamente era int
X=str(x) #cambio a str
print(x) #ejecuto
print(type(X)) #sale un letra numero

i="10"
print(type(i)) #identificar como letra
b=1 
print(type(b)) #identificar como numero 
i=int(i) #cambiar como numero poniendo la i o la variable que previamente era int
print(type(i)) #identificar como numero
j=b+i
print(j) #operar
# Cambiar de str a int
s = "56"
print (s) #ejecuto
print(type(s)) #lee el tipo de caracter
s = int(s) #que lo cambie a int
print(s) #ejecuto
print(type(s)) #lee el tipo



# Cambiar de str a float
y="55.5"
print (y)
print(type(y))
y=(float (y))
print(type(y))
# Cambiar de int a float
y=int(y)
print(y)
s="56a" #no se puede transformar en numero porque 56a no tiene base 10 solo transforma numeros e
s=(int(x))
# Para ver la longitud de una lista de caracteres (lista) funcion len solo para str no int. para cualquier lista de caracteres (tuplas, conjuntos, listas, str)
p = "lista de caracteres"
print(len(p))
q=10
q=str(10)
print(len(q))
v=p+q
print (v)
print(len(v))
# String, Integer, Float, List, None (NaN), bool
# str, int, float, list, bool (tipos de variables)
#tipo float (numero con decimales)
o = 5.876
print(type(o))
j=2
z=o+j #permite sumar int and float xq son numeros
print(z)
o =float(o) #preguntar como quitar decimales para quitar decimales transformandolo en uno entero
print(o)
print(type(o))
o = int (o)
print (o)
print(type(o))
w=2+3*5 #primero multiplicaciones y divisiones
print(w)
w=(2+3)*5 #se hacen primero parentesis 
print(w)
w=((2+int("22"))*5) #puedo poner numeros que se trnasofrman como int
print(w)
m = ((((65 + int("22")) * 2))) #puedo poner numeros que se trnasofrman como int. los parentesis como en mates sigue el orden de dentroa fuera
m = print (m)
# los decimales son float. Python permite las operaciones entre int y float el rsultado era un float
x = 4
y = 4.2

print(x + y)
# La división normal (/) es siempre float
# La división absoluta (//) puede ser: 
# - float si uno de los dos números (o los dos) son float
# - int si los dos son int 
j = 15
k = 4
division = j // k #division abosoluta, sin decimales
print(division)
print (type(division))
division_2= j/k #division float con decimales
print (division_2)
print(type(division_2))
l=4
p=2
division = l//p
division_2= l/p
print(division)
print(division_2) #aunque salga un numero sin decimales te mantiene el .0 en las operaciones
num1 = 12
num2 = 3

suma = num1 + num2
resta = num1 - num2
multiplicacion = num1 * num2 
division = num1 / num2
division_absoluta = num1 // num2

print("suma:", suma)
print("resta:", resta)
print("multiplicacion:", multiplicacion)
print("division:", division)
print("division_absoluta:", division_absoluta)
print(type(division)) #de tipo float
print(type(division_absoluta)) #de tipo entero
# Jupyter notebook permite que la última línea se imprima (print) por pantalla ( la variable ) si pones solo x en la ultima linea te va a leer eso como print(x)
#jupyter interpreta cada ventana es un notebook
#solo en jupyter no en un notebook puro de python
#ejemplo solo va a mostrar el 2 como un print
x= 2
y= 4
x
# Soy un comentario
# print("Hello Python world!")
# Estoy creando una variable que vale 2 
"""
Esto es otro comentario
"""
# y comillas son comentarios ambos<jupyter_output><empty_output><jupyter_text>Ejercicio:  Crear una nueva celda. Declarar tres variables: - Una con el nombre "edad" con valor vuestra edad- Otra "edad_compañero_der" que contengan la edad de tipo entero de vuestro compañero de la derecha- Otra "suma_anterior" que contenga la suma de las dos variables anteriormente declaradas Mostrar por pantalla la variable "suma_anterior"<jupyter_code>edad=28
print("edad", edad)
edad_companero_der= 26
print ("edad_companero_der", edad_companero_der)
suma_anterior= edad + edad_companero_der
print(suma_anterior)
#funciones built-in de string
#no se puede designar una variable con alguna funcion que ya este descrita dentro de python (ejemplo int o cualquier otra) no se podria nombra int = "dos" xq int ya es una variable de python
#s i a cualquier variable le pones punto detras te salen todas las funciones del tipo de la variable que sea, entero, cadena, float etc)<jupyter_output><empty_output><jupyter_text>2. Números y operadores<jupyter_code>### Enteros ###

x = 3

print("- Tipo de x:")
print(type(x)) # Imprime el tipo (o `clase`) de x (entero)
print("- Valor de x:")
print(x)       # Imprimir un valor
print("- x+1:")
print(x + 1)   # Suma: imprime "4"
print("- x-1:")
print(x - 1)   # Resta; imprime "2"
print("- x*2:")
print(x * 2)   # Multiplicación; imprime "6"
print("- x^2:")
print(x ** 2)  # Exponenciación; imprime "9" 3^2
# Modificación de x
x += 1  #aumentar x en 1 unidad (x=x+1) tambien se podria expresar asi tambien
print("- x modificado:")
print(x)  # Imprime "4"

x *= 2 #multiplicacion, X=2x tambien se puede expresar asi (ahora x es 4 no 3 xq lo hemos modificado)
print("- x modificado:")
print(x)  # Imprime "8"

print("- El módulo de x con 40")
print(40 % x) #muestra el resto de 40/el ultimo x que es 8 y ese resto es 0

print("- Varias cosas en una línea:")
print(1, 2, x, 5*2) # imprime varias cosas a la vez, hasta operaciones
# El módulo muestra el resto de la división entre dos números
#el modulo de un numero se expresa con el % que es la division de 4/2 y nos quedamos con el resto
x = 4 % 2
print(x)

numero = 99 #aqui saldria 1 xq es imparhaciendo el numero%2 y con el 10 saldria 0 porque es par
numero1=10

numero % 2 
numero1 % 2 # Si el resto es 0, el número es par. Sino, impar. xq es divisible entre 2 
#numero % 3 si el numero es divisible entre 3 vamos que el resto da 0<jupyter_output><empty_output><jupyter_text>Título markdown  INPUT<jupyter_code>#funcion input x = input() x va a ser un valor de texto (str) del valor que le asigne es como si escribiera con las comillas por ejemplo cuando hay que meter algo de informacion en un programa rollo banco (escriba su contraseña ) para que cuando le salga la ventana de escribir le salga lo que hay que escribir ejemplo si meto X=input("meter su contraseña") le sale ese texto para que sepa el usuario que escribir le va a salir "meter su contraseña" MIRAR PARTE JUSTO INFERIOR Y PRINTEAR "si no se pone las comillas no aparece que texto hay que rellenar"
x=input("meter contraseña")
print (x)
print(type(x))
#para escribir un numero como numero (int) hay que meter la funcion input con int x=int(input()) he escrito el input como 2 ocmo letra xo como tengo el int se cambia a numero y puedo sumarle otro numero. si escribo un decimal en uno entero te quita la parte decimal (no me esta funcionando :)
x=int(input("escribe un numero"))
y = 3
z=x+y
print(z)
print(type(x))

# Si quieres que sea decimal se pone float 
x=float(input("escribe un numero decima"))
y = 3
z=x+y
print(z)
print(type(x))

## 3. Tipo None
#str int float 
#tipo variable none valor nada no se puede sumar a un valor none un numero entero decimal etc
x= None
print(x)
print(type(x))
x= None 
X=str(x)
print(x) #se transforma en la cadena"none"<jupyter_output>None<jupyter_text>4. Listas y colecciones<jupyter_code>#una COLECCION  puede ser:
#lista, conjunto(set), una tupla, un array, diccionario,string (las letras que hemos visto antes)
# son colecciones porque nos permiten obtener posciones
# Lista de elementos:

# Las posiciones xa todas las anteriores se empiezan a contar desde 0 esa es la posicion 1 la posicion 2 es el 1 
#para crear una variable que sea una lista se usan los corchetes. Ya hemos visto que para los str se usan las "" pues para las listas los corchetes. 
# en una lista puede haber strings o listas   vacios "" [] y si haces el type te van a decir que son listas (list) o letras (strings)
s = "Cadena"
print(s[0])
# c es la posicion 0 la primera a es la posicion 1 la d es la poscion dos etc

j =["1", "lapiz", s, 10]
print(type(j)) # como se ve lo lee como una lista al ejecutar type ya que esta entre corchetes
#esto es una lista de elemetnos ya que va con corchetes
lista = [3,7.2, "hola"]
print (lista[0]) #posicion 1
print (lista[1]) #posicion 2
print(lista[2]) #posicion 3
#menos 1 representa el ultimo elemento de la lista
print (lista[-1]) #ultimo
print(lista[-2]) #penultimo
print(lista[-3]) #antepeultimo
#puedo hacer listas [0:1] el primero  se incluye le ultimo no. para que se incluyese tendria que ir con coger hasta el siguiente
print(lista[0:1])
print(lista[0:2])
print(lista[0:3]) #mirar estos 3 ejemplos
#el salto de linea se representa \n 
print("hola\n me llamo\n Pablo") #saltos de lineas

lista = [3,7.2, "hola"]
print("primer elemento:\n", lista[0],"\nsegundoelemento:\n", lista[1],"\nultimoelemento:\n", lista[2]) #asi se muestra todo a la vez bajados los titulos
print (str(lista[0])+"\n"+str(lista[1])+"\n"+(lista[2])) #sin titulos 
#forma avanzada
print (str(lista[0]), str(lista[1]), (lista[2]), sep="\n") #funcion para que por cada valor lo separe de la manera que le indiques por eso ponemos \n
lista = [3,7.2, "hola"]
print("primer elemento:\n"+str(lista[0])+"\nsegundoelemento:\n"+str(lista[1])+"\nultimoelemento\n"+lista[2]) #esto se muestra otra vez los vaolres de  varios str solo se puieden sumar cadenas, numeros etc por eso hay que transformarlos. el ultimo no se transforma ya que es str"muestra la primera cadena concatena con el elemento posicion 0 luego concatena la segunda cadena que a su vez lo concatena con el elemento de la lista en segunda posicion y en tercer lugar lo mismo"
#esta lista tiene 3 elementos el ultimo siendo una lista teniendo 2 elementos
lista2= ["hola", 1, [7,2,"x"]]
print(len(lista2)) #longitud de la lista
#para que me saliese el ultimo elemento tendria que poner con -1
print(lista2[-1])
#para mostra el ultimo elemetno de la ultima lista ultimo elemenot se ponen dos -1 [-1] [-1] porque el primero hace referencia a la primera lista y el segundo a la segunda
print (lista2 [-1][-1])
#para leer el primer caracter del ultimo conjunto se haria asi 

lista3=["hola",2,[7.2,"xa"]]
print(lista3[-1][-1][0]) #xq el primer -1 es para la primera lista indicando el ultimo elemento el segundo xa el ultimo elemento de la segunda lista y el 0 xa la 1º posicion del ultimo elemento de la segunda lista
print(lista3[-1][-1][1]) #xq el primer -1 es para la primera lista indicando el ultimo elemento el segundo xa el ultimo elemento de la segunda lista y el 1 xa la 2º posicion del ultimo elemento de la segunda lista
print(lista3[-1][0]) #xq el primer -1 es para la primera lista indicando el ultimo elemento el 0 xa el primer elemento de la segunda lista y como el primer elemento solo tiene un valor al ser un numero no se puede coger posicion 1 o 2 o asi. 
#es una lista dentro de una lista con un elemetno. si le pudes el ultimo o el primero es el mismo las comas como si no hubieran elemetnos
lista4=["hola",2,[[7.2,"xa"]]] #la segunda lista, el segundo grupo de corchetes tiene 1 elemento y la tercera lista, el tercer grupo de corchetes tiene 2 elementos 
print(type(lista4)) #tipo de elemento
print(len(lista4)) #longitud de la lista
print((lista4[-1])) #ultimo elemento de la lista primera incluye corchetes dobles 
print((lista4[2])) #ultimo doble corchete porque lo considera 
print(lista4[-1][0]) #  elemento segundo de la primera lista y de la segunda lista el ultimo elemento que es tambien el primero ya que tiene solo un elemento
print(lista4[-1][0][-1]) #  elemento segundo de la primera lista y de la ultima lista el ultimo elemento 
print(lista4[-1][0][-1][-1]) #ultimo elemento de la lista, de la segunda lista (elemento 2) la posicion 1 pero por el final la primera posicion 
lista5=["hola",2,[[7.2,"xa"] ,6]] #primrea lista 3 elementos 2º 2 elementos y 3º 2 elementos 
print(len(lista5))
print(lista5[-1][-1])
print(lista5[-1][0][0])
#menos 1 representa el ultimo elemento de la lista xa dar la vuelta los dos :: empezar a leer de derecha a izquierda
s = "<NAME>"

print(s[::-1]) #tb existe la funcion reverse pero de esta manera se crea una copia
# Para acceder a varios elementos, se especifica con la nomenclatura "[N:M]". N es el primer elemento a obtener, M es el último elemento a obtener pero no incluido. Ejemplo: 

# Queremos mostrar desde las posiciones 3 a la 7. Debemos especificar: [3:8] 

# Si M no tiene ningún valor, se obtiene desde N hasta el final. 
# Si N no tiene ningún valor, es desde el principio de la colección hasta M
s = "<NAME>"

s[3:len(s)]
#otros ejemplos desde la posicion 2 hasta la posicion 9 incluida la "l" de clara no la incluye
s[2:10]
x="hola"
print(len(x))
s[1:len(x)] #con len se coge hasta el final de la palabra lo mismo que no poner nada detras poner desde la 1º posicion hasta ningun valor y saldria lo mismo [0:]

x="hola"
print(len(x)) 
s[:2] #como no tiene valor de principio coge desde la posicion 0 si pasase con el final seria igual que poner [0:2]
x="hola"
x=x.upper() 
#para poner mayusculas se usa upper y se actualiza asi esto es una funcion de strin, ahora vamos a ver que las listas tienen sus propias funcinoes
print(x)
lista=[1]
print(lista)
lista.append(7) #para agregar un elemento se usa lista.append lo agrega al final de la lista si  ejecuto  este comando de nuevova a salir un tercer elemento que tambien sera 7. esto se debe a que estan en celdas diferentes. si hago todo en la misma celda no pasa. mirar siguiente 
print(lista)
lista=[1]
print(lista)
lista.append(7) #no se pone lista= porque son funciones
print(lista) #aqui no salen mas 7 solo 1
# remove elimina el primer elemento que se encuentra que coincide con el valor del argumento en este caso elimina el unico 7 que hay si hubiera más eliminaria el primer 7
#no se pone lista= porque son funciones si volvemos a poner list.remove(7) no va a poder eleminarlo y va a saltar error xq no hay mas 7 
lista=[1,7]
lista.remove(7) 
print(lista)

lista2= [1, 'a',2,'a']
lista2.remove('a') #elimina el primer elemento "a"
print(lista2)
lista2= [1, 'a',2,'a']
lista2.remove('a') #elimina el primer elemento "a"
lista2.append("s") #añado s al final
lista2.remove("s") #quito s al final se queda igual
print(lista2)
lista3= [1, 's',2,'a'] #si esta es mi lista 3 
lista3.remove('a') #elimina el primer elemento "a"
lista3.append("s") #añado s al final
lista3.remove("s") #quito s del principio 
print(lista3)
lista=["hola",2,[7.2]] #vamos a añadir un segundo elemento en la segunda lista
print(len(lista4))
lista[-1].append(4)
print(lista)
lista=["hola",2,[7.2]] #vamos a añadir un segundo elemento en la segunda lista
print(len(lista4))
lista[-1].append(4)
print(lista)
lista=["hola",2,[7.2]] #vamos a añadir un segundo elemento en la segunda lista
print(len(lista4))
lista[-1].append([4])
print(lista) #asi estoy añandiendo una lista dentro de la segunda lista. la segunda lista pasa a tener dos elemetnos y la tercera 1
lista=["hola",2,[7.2]] #vamos a añadir un segundo elemento en la segunda lista
print(len(lista4))
lista[-1].append([4,1])
print(lista) #he añadido una lista con dos elementos dentro de la segunda lista. asi la segunda lista tiene 2 elementos y la tercera 3 
# Accedemos a la posición 1 del elemento que está en la posición 2 de lista
lista=['1',2.3,[8.1,'xs']]
print(len(lista))
print (lista[2][1]) #posicion 2 de la primera lista y luego la primera posicion de la segunda lista

lista=['1',2.3,[8.1,'xs']]
lista.reverse() #otra funcion no hace falta el lista= da la vuelta a los valores de la lista
print(lista)
lista=[2,4,6,8,'o']
print(len(lista))
lista.append(10) #añade a la ultima posicion un 10 
print(lista)
lista=[2,4,6,8,'o']
print(len(lista))
lista.remove('o') #elimina la primera'o'
print(lista)
lista=[2,4,6,8,'o',[8.1,'xs'],9.4,'1']
print(len(lista))
lista[5].append(6) 
#añade un 6 dentro de la lista que esta dentro. como ultimo caracter1
print(lista)
lista=[2,4,6,8,'o',[8.1,'xs'],9.4,'1']
print(len(lista))
lista[5].append([6]) 
#añade una lista dentro de la segunda lista con una unica variable 6. 
print(lista)
lista=[2,4,6,8,'o',[[8.1,'xs'],9.4,'1']]
print(len(lista))
lista[5][0].append (4) #posicion 5 para llegar a la segunda lista y luego posicion 0 para llegar a la tercera lista
print(lista)
#para ir desengranando elementos de una lista se haria asi: lo hemos visto antes recordatorio
lista=[2,4,6,8,'o',[[8.1,'xs'],9.4,'1']] 
print(lista[5][0]) #hemos cogido los elementos de dentro<jupyter_output>[8.1, 'xs']<jupyter_text>Colecciones1. Listas2. String (colección de caracteres)3. Tuplas4. Conjuntos (Set)<jupyter_code># Listas --> Mutables podemos agregar elementos
lista = [2, 5, "caract", [9, "g", ["j"]]]
print(lista[-1][-1][-1])
print(len(lista))
lista[3][2][0]
print (lista[3][2][0]) #accede a lo mismo aqui que con lo de print(lista[-1][-1][-1])

#importante recordar que un strin es una coleccion tambien por lo tanto: los numeros NO son colecciones
s='jqa'
print(s[0])

#tupla es otro tipo de coleccion
#listas []
#tuplas () se tiene que poner una coma para que sea una tupla y no otro tipo de variable ejemplo
tupla=(2,)
print(len(tupla)) #con esto te da longitud de 1 porque tiene un elemento la tupla
tupla=(2,1)
tupla[1] #al igual que las listas podemos acceder a los elementos de la tupla elemento 1 ultimo elemento de la tupla
# Tuplas --> Inmutables no permite agregar ni eliminar elementos y tienen que estar en el mismo orden, la longitud no se pueden modificar si empieza con 4 tiene que acabar con 4 elementos. si quieres modificar una tupla tienes que pasarla a lista y modificarla y volverla a tupla. 

tupla = (2, 5, "caract", [9, "g", ["j"]])
print(type(tupla))
# Update listas
lista = [2, "6", ["k", "m"]]
lista[1] = 1 #sirve para actualizar lista ejemplo en vez de '6' el valor va a ser 1 se actualiza las tuplas no se pueden.
print(lista)
tupla2=(2,'6',['k','n'])
tupla2[2].append('otro') #esto me lo deja hacer xq añade dentro de la lista de la tupla y no modifica el numero de elemenots de la tupla ni la longitud siguen siendo 3 elementos el orden de la tupla sigue siendo el mismo
print(tupla2)
tupla2=(2,'6',['k','n'])
tupla2[2].remove('k') #tambien puedo borrar dentro de la lista no de la tupla
print(tupla2)
#cambiar tupla a lista para realizar cambios y luego pasarlo a tupla
tupla2=(2,'6',['k','n'])
print(tupla2)
tupla2=list(tupla2)
print(type(tupla2)) #he modificado la tupla a lista para realizar futuras modificaciones en la tupla
tupla2[1]='5' #modifico el 'b' por '5'
print(tupla2)
tupla2=tuple(tupla2)
print(type(tupla2)) #vuelvo a transformarlo en tupla
tupla2=(2,'6',['k','n'])
tupla2=list(tupla2)
tupla2.remove('6')
tupla=tuple(tupla2)
print(tupla2) #cambio a lista, elimino vuelve a tupla
# CONJUNTOS:
# coleccion de elementos no hay elementos repetidos y los ordena se presentan con las {} pero se usan los () y se crea una lista y se pasa a conjunto o se crea un conjunto vacio. Los connjuntos no pueden tener colecciones mutables (listas) pero si pueden tener tuplas, o numeros none. 

conjunto = [2, 4, 6, "a", "z", "h", 2] #aunque hay dos doses luego abajo solo sale 1 y esta todo ordenado
conjunto = set(conjunto) #con el set se convierte en conjunto si no se transforma con set seria una lista
conjunto
conjunto = ["a", "z", "h", 2, 2, 4, 6, True, True, False] #el false va primero y luego el true y van numeros false true y luego letras
conjunto = set(conjunto) #con el set se convierte en conjunto si no se transforma con set seria una lista
conjunto

#si quiero que mi lista no tenga datos repetidos: 
#primero lo paso a conjunto, y despues lo paso a lista
lista= (2,2,2,"a")
lista=set(lista)
lista=list(lista)
print(lista) #se han eliminado los duplicados haciendo esto #no tiene xq mantener el orden en el que estaban antes de pasarlos a conjunto y luego a lista
#se puede expresar en una misla linea todo
lista=list(set(lista))
print(lista)
#tupla vacia
tupla_vacia=()
#lista vacia
lista_vacia=[]
#conjunto vacio
conjunto_vacio=({0,})
#string vacio
string_vacio=""
#tupla vacia
tupla_vacia=()
print(type(tupla_vacia))
#lista vacia
lista_vacia=[]
print(type(lista_vacia))
#conjunto vacio
conjunto_vacio=({0,})
print(type(conjunto_vacio)) #si no se pone un numero con la coma es un diccionario
conjunto = ["a", "z", "h", 2, 2, 4, 6, 2.1, 2.4, 2.3, True, True, False]
conjunto = set(conjunto) #con el set se convierte en conjunto si no se transforma con set seria una lista
#numeros estan entre medias los floats, booleanos y despues letras 
conjunto
conjunto_tupla = ("a", "z", "h", 2, 2, 4, 6, 2.1, 2.4, 2.3, True, True, False)
conjunto = set(conjunto_tupla) #de tupla a conjunto
conjunto
conjunto = {"a", "z", "h", 2, 2, 4, 6, 2.1, 2.4, 2.3, True, True, False}
conjunto
#igual que para una tupla hay que poner una coma si solo se tiene un elemento, en los conjuntos son igual
conjunto={2,}
tupla=(2,)
print(type(conjunto))
print(type(tupla))
s = "String"
lista_s = list(s)
lista_s
s = "String"
conj = {s}
conj
# Cambiar de tupla a lista, remover elemento y convertir en tupla

conjunto = {2, 5, "h"}
lista_con_conjunto = [conjunto]
lista_con_conjunto[0]
# No podemos acceder a elementos de un conjunto
lista_con_conjunto[0][0]<jupyter_output><empty_output><jupyter_text>5. Condiciones: if, elif, else  Boolean<jupyter_code>True
False

# Operadores comparativos

# Diferente
"""
==  -> Igualdad
!= -> Diferecia
< -> Menor que
> -> Mayor que
<= -> Menor o igual
>= -> Mayor o igual
"""

# and solo devolverá True si TODOS son True
True and False
# or devolverá True si UNO es True
# Sinónimos de False para las condiciones:
# None
# False
# 0 (int or float)
# Cualquier colección vacía --> [], "", (), {}

# El None no actúa como un número al compararlo con otro número
"""
El True lo toma como un numérico 1
"""<jupyter_output><empty_output><jupyter_text>Bucles For, While<jupyter_code># Lista alturas<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11066330814441645, 'fraction_numerical': 0.024601175482787573, 'mean_word_length': 4.804337231968811, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 44, 'https://': 11, 'lorem ipsum': 0, 'www.': 4, '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': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '318614', 'license': 'MIT', 'n_tokens_mistral': 8992, 'n_tokens_neox': 9030, 'n_words': 3445, 'path': 'week1_precurse_python_I/day2_python_I/theory/Python_I_Precurse.ipynb', 'repo_name': 'PabloEduardoMartinezPicazo/Bootcamp-DataScience-2021', 'size': '23836'}