miércoles, 24 de julio de 2019

Añadir elementos a una lista en Python

Creamos un programa que nos solicita por teclado un número entero y lo añade a una lista en python.

La lista solo admitirá números enteros, para lo cual se convertirá el dato devuelto por input, que es un string en un int.

Esta conversión puede no ser posible, como en el caso de introducir un texto en lugar de un número, lo que genera una excepción.

Como ejemplo, si ejecutamos esta línea de cógido, e introducimos el texto "hola" en la consola, se genera una excepción de tipo ValueError: invalid literal for int() with base 10: 'hola'

dato = int(input("dame un numero: "))

La salida en la consola será:


dame un numero: hola

Traceback (most recent call last):

  File "C:/Users/Ubuntu/PycharmProjects/002/007.py", line 1, in <module>

    dato = int(input("dame un numero: "))

ValueError: invalid literal for int() with base 10: 'hola'



Process finished with exit code 1



Por lo tanto tendremos que controlar la excepción para ignorar esas entradas y continuar con el programa.

Para ello usaremos la instrucción try / except

En caso de que no se pueda realizar la conversión a número entero entonces se ejecutará el código dentro de except, en este caso la instrucción continue.

Esta instrucción hace que se pase a la siguiente iteración del bucle while.

En caso de que no se genere ninguna excepción se ejecuta el código dentro de else.

De esta forma solo se añadirá el dato a la lista si se realiza correctamente la conversión.

Además como la condición de finalización del bucle es que se introduzca un valor negativo se comprueba si el valor es mayor que cero, en caso contrario no se añade, y al ser evaluado en el while se finaliza el bucle.


miLista = []

dato = 999
while dato > 0:
    try:
        dato = int(input("dame un numero: "))
    except:
        continue    else:
        if dato > 0: miLista.append(dato)

print (miLista)


Python listas y conjuntos

Por ahora nos centraremos en el uso de listas en Python.

Si bien es cierto que se pueden crear arrays de un único tipo de datos mediante la librería array, estas estructuras optimizan mejor la memoria, pero como contrapartida son mas lentas que las listas.

Por otra parte que todos los datos contenidos son del mismo tipo, pero eso se puede resolver mediante programación.

Por ahora el único uso que haremos de otros tipos de datos, será el de los conjuntos, por la utilidad que tiene a la hora de eliminar duplicados de una lista.

A continuación muestro un ejemplo de como se usaría un set / conjunto para eliminar los duplicados de una lista en python.

listaConDuplicados = [1,2,3,4,3,2,5,1,2,99,4,5,6,4]
print (listaConDuplicados)
listaSinDuplicados=list(set(listaConDuplicados))
print (listaSinDuplicados)

La salida en consola sería la siguiente:

[1, 2, 3, 4, 3, 2, 5, 1, 2, 99, 4, 5, 6, 4]
[1, 2, 3, 4, 5, 99, 6]

Como se puede comprobar, se obtiene una nueva lista desordenada en la que se han mantenido solo las primeras apariciones de cada elemento.

En este ejemplo se ha usado dos listas diferentes, pero se podría haber asignado el set a la lista original, perdiendo los datos originales y obteniendo en su lugar la lista sin repeticiones.

listaConDatos = [1, 2, 3, 4, 3, 2, 5, 1, 2, 99, 4, 5, 6, 4]
print (listaConDatos)
listaConDatos=list(set(listaConDatos))
print (listaConDatos)

Esta segunda opción permite un aprovechamiento mayor de la memoria por parte del script.

domingo, 21 de julio de 2019

El limite de Excel

¿Qué hacer cuando se llega al límite de lo que puedes hacer con Microsoft Excel?

En mi caso me ha pasado.

Por un lado la necesidad de realizar cruces de listados, o funciones "sumar si" que tardan más de 15 minutos.

Por otro lado me he encontrado con tener que importar parte de un fichero de 30 Millones de líneas.

Para el primero la solución ha sido usar una base de datos, en este caso he tenido que probar entre Micrsoft Access y Mysql (en concreto una distribución xamp)

Aunque la primera es más cómoda, la potencia de la segunda es muy superior.

Para el segundo caso, he tenido que buscar algún método para extraer parte de las líneas a un nuevo fichero.

En este caso, y dado que ya tenía alguna experiencia previa, me he decantado por la creación de scripts en Python, dada la facilidad para el tratamiento de ficheros y textos, así como su posibilidad de automatizar mediante el programador de tareas.