sábado, 2 de junio de 2018

Enumerate en Python

Cuando queremos recorrer los elementos de una lista en Python podemos hacer uso de la función Enumerate que se encuentra definida en Python.

Comentarios al código

Primero creamos una lista con las cuatro estaciones

Luego imprimimos la lista para ver el resultado. Esto es lo habitual manejando listas. Usamos print(mi_lista) y también podríamos haber usado print(list(mi_lista)) con idéntico resultado.

Seguidamente usamos enumerate y al imprimirlo nos devuelve una tupla con dos compoentes. Por una lado el contador que comienza en cero, y por el otro lado el elemento correspondiente de la lista.

Finalmente, en este primer ejemplo, imprimimos la tupla pero haciendo que el contador comience en uno. Esto se consigue añadiendo start=1.


#creamos una lista
mi_lista=["primavera","verano","otoño","invierno"]

#imprimimos la lista completa
print(mi_lista)

#usando enumerate obtenemos una tupla
#con un contador desde cero y los elementos de la lista
print(list(enumerate(mi_lista)))

#podemos conseguir que el contador comienze en 1
print(list(enumerate(mi_lista, start=1)))

En el segundo ejemplo usamos un bucle for para recorrer todos los elementos de la lista, y dispones al mismo tiempo del valor del contador. Éste comienza en cero pero también podría comenzar en uno si así lo indicásemos añadiendo start=1.

#otro ejemplo
esta_lista=[100,110,120]

#creamos un bucle for donde
#se recorre la lista y se puede usar el contador

for contador, elemento in enumerate(esta_lista):
    print(contador, elemento)


Cálculo del VAN

Vamos a realizar un caso práctico para ver el uso de numerate. Se trata de calcular el VAN (Valor Actual Neto) en inglés NPV (Net Present Value).

Se trata de calcular el VAN de la inversión cuyos flujos de caja se indican. Esta inversión valorada al 10% anual arroja un VAN igual a cero.

def npv(rate, cashflows):
    total = 0.0
    for i, cashflow in enumerate(cashflows):
        total += cashflow / (1 +rate)**i
    return total

cashflows=[-4000,1400,1300,1200,1100]

print(npv(0.1,cashflows))

No hay comentarios:

Publicar un comentario