1 00:00:00,370 --> 00:00:05,129 Bueno, vamos a continuar por donde nos quedamos, por listas y cadenas en Python. 2 00:00:09,859 --> 00:00:19,079 Bien, pues aquí veis una comparativa entre las listas y las cadenas en Python, tanto en C como en el propio lenguaje que ahora estamos viendo, que es Python. 3 00:00:19,980 --> 00:00:29,500 Y bueno, aquí lo que me gustaría destacar o que se os quedara es ver la diferencia que hay o la de cosas que podemos hacer en Python respecto a C. 4 00:00:29,500 --> 00:00:41,240 ¿Vale? Recuerdo que en C, pues, partíamos únicamente de definir nuestro array, ¿vale? Y le dábamos los valores, ¿vale? Y eso no se podía cambiar, nunca podemos cambiar ese tamaño, ¿vale? 5 00:00:41,420 --> 00:00:48,159 Y siempre accedíamos, pues, entre 0 y el número de elementos menos 1, ¿vale? Es decir, en este caso accederíamos entre 0 y 4. 6 00:00:49,439 --> 00:00:55,119 Si queremos sobreescribir alguno de los valores, pues recordad que simplemente ponedlo entre corchetes y asignadle un valor, ¿vale? 7 00:00:55,119 --> 00:01:19,180 Y, bueno, en el caso de Python esto es mucho más versátil, ¿vale? Es decir, las listas o los arrays pueden ser dinámicos, es decir, pueden cambiar de tamaño en todo momento. De hecho, nosotros podemos crear un array, ¿vale? Llamarlo en vez de muestra, llamarlo a y crearlo como a igual al array vacío, ¿vale? Es decir, que tendríamos ahí cualquier elemento posible. 8 00:01:19,180 --> 00:01:34,959 Y, bueno, pues ya a partir de ahí empezaríamos a jugar con ello. La asignación o la modificación de valores se hace exactamente igual que en C, pues poniendo entre corchetes el índice, ¿vale? Y sustituyendo esto, pues en este caso, en lugar del 30, lo que estaríamos haciendo sería poner un 99, ¿vale? 9 00:01:34,959 --> 00:01:39,799 Y luego tenemos una serie de funciones que nos aportan más versatilidad. 10 00:01:39,900 --> 00:01:42,239 Tenemos por lugar el append, ¿vale? 11 00:01:42,359 --> 00:01:44,040 Que lo que hace es que añade al final. 12 00:01:45,159 --> 00:01:50,079 Luego tenemos insertar, que añade en la posición que queramos y el valor que queramos, ¿vale? 13 00:01:53,040 --> 00:01:53,480 Perdón. 14 00:01:53,799 --> 00:01:58,260 Y luego tenemos pop, que lo que hace es que elimina el último elemento, ¿vale? 15 00:01:59,420 --> 00:02:02,239 Y len, que nos devuelve la longitud de nuestro array, ¿vale? 16 00:02:02,239 --> 00:02:27,039 Y como versatilidad, aparte, eso es más versátil, pero nos va a dar más complejidad o tener que tener más cuidado con los valores que utilizamos, pues podemos crear arrays mixtos, es decir, tener enteros, flotantes, cadenas de texto o string, ¿vale? Recuerdo que eso son lo que llamamos string, ¿vale? Y booleanos, ¿vale? Booleanos, que ya sabéis que son verdadero y falso, ¿vale? 17 00:02:27,039 --> 00:02:48,710 En cuanto a jugar con esas listas, ¿vale? Vamos a distinguir dos elementos. Por un lado vamos a distinguir el slicing, ¿vale? Que simplemente es hacer sus listas a partir de una lista como la que veis aquí, ¿vale? Que va desde 5 hasta 30 y luego decrece, ¿vale? Vamos a crear listas. ¿Cómo lo podemos hacer? Pues poniendo los índices entre corchetes, ¿vale? 18 00:02:48,710 --> 00:02:55,669 Si yo pongo que quiero del array o de la lista señal, quiero los elementos desde el 2 hasta el 5, ¿vale? 19 00:02:56,030 --> 00:03:07,490 Recordad que este es el 0, el 1, el 2, pues cogería desde aquí, desde el 20, 2, 3, 4 y el 5, pero el último no lo cogería, está excluido, ¿vale? 20 00:03:07,509 --> 00:03:12,849 Ya veis que pone aquí fin excluido, entonces cogería 20, 30 y luego 20 otra vez, ¿vale? 21 00:03:12,849 --> 00:03:24,569 Si yo no pongo nada al inicio, pues me cogerá desde el principio, entonces me cogería el 0, el 1 y el 2, ¿vale? 5, 10 y 20. Lo mismo pasaría al final, si no pongo nada, pues iría hasta el final de la lista, ¿vale? 22 00:03:24,830 --> 00:03:40,509 Pero recordad que no me va a coger, perdón, en este caso, ¿vale? Al poner al final de la lista sí que me va a coger el último elemento, ¿vale? Entonces me cogería desde el 4, pues esto es el 0, 1, 2, 3, desde aquí, pues hasta el final, ¿vale? Es decir, 4, 10, 5. 23 00:03:40,509 --> 00:03:53,030 Y luego, pues podemos jugar con el número de pasos, ¿vale? Pues por ejemplo, en este caso aquí pondríamos inicio, aquí pondríamos final, ¿vale? Y aquí pondríamos el número de pasos. 24 00:03:53,129 --> 00:04:03,030 Pues en vez de coger todos los elementos, quiero coger solo los de los índices pares. Pues cojo el 0, el 2, el 4 y el 6, ¿vale? 25 00:04:03,030 --> 00:04:06,669 Entonces tendría 5, 20, 25, 5, 20, 25, ¿vale? 26 00:04:06,830 --> 00:04:12,050 Y de la misma forma podríamos hacer los pasos en negativo, es decir, podríamos ir hacia abajo, ¿vale? 27 00:04:12,150 --> 00:04:15,810 Es decir, conseguir listas o invertir las listas, ¿vale? 28 00:04:16,589 --> 00:04:27,629 Y luego, a diferencia de en C que hacíamos métodos o recorríamos bucles para conseguir valores estadísticos de eso a lista o de eso a raíz, 29 00:04:27,870 --> 00:04:30,389 aquí ya tenemos funciones que no lo hacen por nosotros, ¿vale? 30 00:04:30,389 --> 00:04:50,430 Ya hemos hablado del n que nos dice la longitud, 7 elementos, ¿vale? 1, 2, 3, 4, 5, 6 y 7, ¿vale? Luego tenemos una función sum que nos suma todo, el máximo que nos devuelve el valor más grande y el mínimo que nos devuelve el valor más pequeño, pero no nos devuelve los índices, ¿vale? Simplemente nos devuelve el elemento. 31 00:04:50,430 --> 00:05:10,029 Y luego tenemos otros métodos útiles, que es muy importante destacarlos, como son métodos para ordenar. Y ahí voy a distinguir dos tipos de métodos de ordenar. Vamos a tener sort, que lo que hace es que modifica la lista, es decir, la lista de datos me la va a ordenar y me la ordena de creciente a decreciente. 32 00:05:10,029 --> 00:05:31,670 Por lo tanto, esta lista que tenéis aquí pasaría a ser esta nueva lista que os destaco en rojo, ¿vale? Y luego tenemos el método sorted que lo que hace es que nos devuelve una nueva lista, es decir, en vez de ordenarlo en la lista original, nos crea una nueva lista, ¿vale? Nos va a crear una nueva lista que yo he llamado nueva, ¿vale? Que es la que va a ordenar, ¿vale? 33 00:05:31,670 --> 00:05:46,110 Y luego, más versatilidad o más potencias que nos proporciona Python, pues fijaros, si nosotros queremos comprobar si hay un elemento que está en la lista, 34 00:05:46,290 --> 00:05:55,470 simplemente poniendo el elemento que queremos in la lista, ¿vale? Nos va a devolver un valor booleano, verdadero o falso, dependiendo de si está o no está. 35 00:05:55,470 --> 00:06:10,810 Si está, nos devolverá un true. Si no está, nos devolverá un false, ¿vale? Y también podemos, otros métodos útiles, obtener el índice de ese valor. Es decir, pensad que nosotros hemos obtenido el máximo a través de esta señal, ¿vale? A través de esta señal, perdón, a través de esta función. 36 00:06:10,810 --> 00:06:30,709 Si yo ese máximo se lo paso a index, ¿vale? Pues ya podría obtener dónde está localizado el índice máximo, perdón, el elemento máximo, ¿vale? ¿En qué índice? Y también podríamos contar qué elementos son iguales, ¿vale? Por ejemplo, ¿qué elementos valen 30? En este caso solo hay uno, ¿vale? Pero bueno, podríamos hacer más cositas. 37 00:06:30,709 --> 00:06:55,060 En cuanto a cadenas de texto, pues recuerdo en C lo definíamos como un array de char y teníamos varias funciones que podíamos utilizar al respecto, strlen que nos daba la longitud sin contar el elemento del barra cero, luego teníamos para concatenar, luego tenemos para comparar y para copiar. 38 00:06:55,060 --> 00:07:03,720 Pues bueno, aquí en Python es relativamente parecido, pero yo creo que es más sencillo de entender. 39 00:07:03,819 --> 00:07:09,639 No tenemos que utilizar tantas funciones. De hecho, no nos requiere ni siquiera incluir una librería externa. 40 00:07:10,459 --> 00:07:13,319 Partimos de dos cadenas, ssid y sufijo. 41 00:07:14,339 --> 00:07:17,540 De nuevo, tenemos la función len que nos devuelve la longitud. 42 00:07:18,339 --> 00:07:21,439 Luego, para concatenar simplemente basta con sumar. 43 00:07:21,439 --> 00:07:27,540 sumamos dos arrays pero tienen que ser dos cadenas de texto si no esto no va a funcionar bien vale 44 00:07:27,540 --> 00:07:33,379 luego para comparar igual que si hicieramos una comparación con números igual igual vale 45 00:07:34,439 --> 00:07:40,579 para copiar simplemente asignación de variables fijaros qué sencillo y luego tenemos otros métodos 46 00:07:40,579 --> 00:07:47,879 que son bastante útiles o sencillos vale tenemos el primer método upper lo que hace es que convierte 47 00:07:47,879 --> 00:07:52,660 a mayúsculas. Luego tenemos el método lower, que lo que hace es que convierte a minúsculas. 48 00:07:53,360 --> 00:07:57,319 Y luego tenemos un método que se llama replace, que es muy importante y se va a utilizar 49 00:07:57,319 --> 00:08:02,019 mucho, sobre todo en uso con ficheros, ¿vale? Y lo que va a hacer es que va a sustituir 50 00:08:02,019 --> 00:08:08,019 5G donde haya 6G. Perdón, va a sustituir 5G con 6G, ¿vale? Esto, por ejemplo, pues 51 00:08:08,019 --> 00:08:11,759 puede ser útil si yo tengo una gran cadena de textos separados con comas, pues yo quiero 52 00:08:11,759 --> 00:08:15,879 separar las comas, ¿vale? Y las comas las quiero sustituir por una barra vertical, por 53 00:08:15,879 --> 00:08:21,879 ejemplo vale y luego al igual que teníamos con las cadenas podemos hacer esta comparativa y podemos 54 00:08:21,879 --> 00:08:30,100 decir aparece 5g en la cadena ssid y si es que sí pues no te volverá un true o no te volverá un 55 00:08:30,100 --> 00:08:38,230 false dependiendo luego en cuanto a las cadenas de texto también podemos hacer slicing vale no 56 00:08:38,230 --> 00:08:42,830 me voy a entretener aquí porque es muy parecido hace exactamente lo mismo pero si voy a destacar 57 00:08:42,830 --> 00:08:51,350 el uso del método split vale y split lo que hace es que nos va a devolver una cadena de texto vale 58 00:08:51,350 --> 00:08:58,309 pues mejor dicho un array por partes es decir nos va a devolver una lista y va a separar por 59 00:08:58,309 --> 00:09:05,070 el identificador que pongamos aquí yo al poner aquí dos puntos vale como partimos de la cadena 60 00:09:05,070 --> 00:09:10,389 de texto protocolo lo que va a hacer es que me va a devolver por un lado esto tcp ip por otro 61 00:09:10,389 --> 00:09:16,750 lado el 443 y por otro lado HTTPS, ¿vale? Entonces me devolvería una lista de tres 62 00:09:16,750 --> 00:09:22,789 elementos diferentes, ¿vale? Y luego, como digo, pues esto se utiliza para hacer parseo, 63 00:09:22,850 --> 00:09:27,950 ¿vale? Que hacer un parseo básicamente es analizar, ¿vale? Entonces yo tengo una línea 64 00:09:27,950 --> 00:09:33,950 o una cadena de texto que tiene, por ejemplo, una IP, un nivel de potencia, ¿vale? Un RSSI, 65 00:09:34,649 --> 00:09:39,889 ¿vale? Y luego tiene también una frecuencia. Entonces lo primero que yo hago es que me 66 00:09:39,889 --> 00:09:44,649 lo separe utilizando como elemento separador el espacio vale decir nada 67 00:09:44,649 --> 00:09:48,889 entonces me va a devolver por un lado en campos de cero me va a devolver la ip en 68 00:09:48,889 --> 00:09:53,149 campos de uno me devolverá el nivel de potencia y en campos de dos me devolverá 69 00:09:53,149 --> 00:09:59,509 la frecuencia vale y yo ahora pues por ejemplo en rs6 vale lo que yo voy a 70 00:09:59,509 --> 00:10:06,230 hacer es el guardar en una variable ip el campo cero en una variable rs6 de 71 00:10:06,230 --> 00:10:14,629 tipo cadena de texto vale tipo cadena de texto voy a devolver campo 1 vale pero voy a reemplazar 72 00:10:14,629 --> 00:10:22,090 dbm por nada vale es una forma de quitarnos ese dbm y lo que voy a hacer es ahora que solo tengo 73 00:10:22,090 --> 00:10:26,690 menos 60 lo voy a convertir en un número vale lo voy a convertir en un número entero utilizando 74 00:10:26,690 --> 00:10:33,590 inter y por último en banda voy a guardar campos 2 pues ya tengo tres variables con la ip el valor 75 00:10:33,590 --> 00:10:35,570 de potencia y el valor de la banda 76 00:10:35,570 --> 00:10:37,509 ¿vale? y me permite pues jugar con esas 77 00:10:37,509 --> 00:10:44,360 cosas, en cuanto a las diferencias 78 00:10:44,360 --> 00:10:46,399 ya significativas entre estos dos lenguajes 79 00:10:46,399 --> 00:10:48,200 bueno, no voy a entretenerme mucho 80 00:10:48,200 --> 00:10:50,100 esto lo dejo para vosotros, pero bueno 81 00:10:50,100 --> 00:10:51,500 hemos visto diferentes elementos 82 00:10:51,500 --> 00:10:53,440 lo que son 83 00:10:53,440 --> 00:10:56,500 los tipos de variables, los tipos de cadenas 84 00:10:56,500 --> 00:10:58,399 el uso de bucles 85 00:10:58,399 --> 00:11:00,460 el uso de elementos de impresión 86 00:11:00,460 --> 00:11:02,440 elementos condicionales 87 00:11:02,440 --> 00:11:04,500 etcétera, etcétera, ¿vale? pero como digo no me quiero 88 00:11:04,500 --> 00:11:05,799 no me quiero entretener 89 00:11:05,799 --> 00:11:18,600 Y aquí al final del programa os he dejado un codiguito súper simple de cómo sería un programa básico de análisis estadístico en C y cómo sería en Python. 90 00:11:18,840 --> 00:11:25,740 Entonces veis que en Python es mucho más eficiente, utiliza muchas menos líneas y requiere por ende menos esfuerzo. 91 00:11:28,570 --> 00:11:34,710 Como incidiendo otra vez en esto que ya hemos hablado varias veces, ¿cuándo utilizar C y cuándo utilizar Python? 92 00:11:34,710 --> 00:11:43,990 Pues C, principalmente cuando estamos trabajando a bajo nivel, queremos optimizar memoria o queremos utilizar cosas muy cercanas de hardware, ¿vale? 93 00:11:44,190 --> 00:11:48,490 Mientras que Python, pues utilizaremos probablemente casi para el resto de cosas, ¿vale? 94 00:11:48,590 --> 00:11:55,110 Es un lenguaje muy utilizado, se está utilizando también mucho en IoT, tanto en Raspberry Pi como en SP32, ¿vale? 95 00:11:55,110 --> 00:11:55,909 Y diferentes elementos. 96 00:11:56,309 --> 00:11:59,190 Y luego se utiliza mucho en Data Science, en análisis de datos, ¿vale? 97 00:11:59,190 --> 00:11:59,970 En ciencia de datos. 98 00:11:59,970 --> 00:12:08,409 Os he dejado también algunos errores típicos en ese paso de C a Python, ¿vale? 99 00:12:08,590 --> 00:12:11,370 Y cosas importantes en cuanto a la indentación, ¿vale? 100 00:12:11,370 --> 00:12:15,129 Que tenemos que quedarnos claros para no cometer errores, ¿vale? 101 00:12:15,389 --> 00:12:23,269 Y bueno, y hay un diagrama conceptual para que veáis cómo cambiamos o cómo pasamos de C a Python, ¿vale? 102 00:12:23,269 --> 00:12:28,330 Qué cosas son nuevas, qué cosas mantienen, qué cosas ya dejamos de... vamos a dejar de utilizar, ¿vale? 103 00:12:28,330 --> 00:12:32,590 Bueno, pero esto lo dejo para vosotros y a trabajar.