download: funcionesPF.py
#!/usr/bin/python2.3
print "\nEjemplos con la funcion map()\n"
# MAP: aplica una funcion a cada elemento de una lista
# y retorna una lista con los resultados.
list = [1, 2, 3.0, "hola", True]
rdo = map(type,list)
print "Lista: ", list, "\n"
print "Resultado de mapear la funcion 'type': ", rdo
list = [1, 2, 3, 4, 5]
rdo = map(lambda n: n*n, list)
print "List: ", list, "\n"
print "Resultado de mapear una funcion anonima (que eleva al cuadrado):"
print rdo, "\n"
# map acepta mas listas como argumentos:
list1 = [1, 2, 3]
list2 = ["Uno", "Dos", "Tres"]
def func2(num, palabra):
aux = str(num) # convierte 'num' a 'string'
return aux + " - " + palabra
print map(func2,list1,list2) # map toma un elemento de cada lista para
# darle argumentos a 'func2'. Si una de las dos
# listas tuviera mas elementos que la otra:
list2.append("Cuatro")
print map(func2,list1,list2)
# Python completa la lista con menos elementos con elementos nulos: None
print "\nEjemplos con la funcion filter()\n"
# FILTER: aplica una funcion que retorna un valor booleano (True o False)
# a los elementos de una lista y retorna una lista que contiene solo los
# elementos que evaluaron True.
abc = "AbcdfghjklnoprsuVxyz" # las cadenas de caracteres pueden usarse de la misma
# forma que una lista (pero son inmutables)
# De las letras que forman mi abecedeario alterado me quedo solo
# con las que estan en la cadena "Feliz Anio Nuevo"
print "map: ", map(lambda i: i in "Feliz Anio Nuevo", abc), "\n"
print "filter: ", filter(lambda i: i in "Feliz Anio Nuevo", abc), "\n"
# Problema: de una lista de numeros detectar los primos.
# Usando filter se puede dar una solucion, aunque no es optima.
def primo(n):
from math import sqrt
test = filter(lambda x: n % x == 0, range(2, int(sqrt(n))))
if len(test) == 0: return True
else: return False
#print "\n", 1, primo(1), 2, primo(2), 5, primo(5), 27, primo(27), 99, primo(99)
def primos(m=100):
return filter(primo,range(m))
print primos()
print primos(250)
# filter() con mas de una lista
# print filter(lambda b,v: b and v, [True, True, False], [False, True, False])
# No, obtuve este error: filter expected 2 arguments, got 3
print “\nEjemplos con la funcion reduce()\n”
# REDUCE: permite aplicar a los elementos de una lista una funcion que tome
# dos argumentos. Aplica la funcion a los dos primeros elementos de la lista,
# luego aplica la funcion al resultado obtenido y al tercer elemento de la
# lista.. continua hasta reducir la lista a un solo elemento.
print reduce(lambda x,y: x+y, [1,2,3,4])
# reduce() acepta opcionalmente un tercer argumento, este es un valor inicial
# que se agrega al principio de la lista:
print reduce(lambda x,y: x+y, [1,2,3,4], 10)
# Se podria usar reduce() para obtener el maximo de una lista de valores
# definiendo una funcion maximo() y luego aplicandola a dicha lista