Aprenda Sobre Map, Filter, Reduce y Lambda con Python
2020-07-27 18:39:18 | | Parte 7 de 7
Verificado En
- Linux Ubuntu 20.04
- Windows 10
- macOS Catalina
Hoy, vamos a demostrar algunos conceptos de programación funcional introduciéndote a mapear, filtrar y reducir con Python.
Como funciones puras, no tienen efectos secundarios, lo que significa que no modifican el estado de los parámetros, sino que devuelven nuevos objetos. E iteran a través de la recursión, lo que significa que ejecutan repetidamente la misma función/operación por elemento.
Python Map
La función map acepta dos parámetros: una función para realizar en cada elemento de un iterable y un iterable. Debido a que map es una función pura, no modifica el iterable, pero devuelve un nuevo iterable con los valores modificados. Y si no utiliza break o continue, se ejecutará map en cada elemento, duplicando cada uno de ellos, por lo que deberá conocer los requisitos de memoria para mapear una gran colección. Si termina siendo demasiado intensivo en memoria, puede que sea mejor con un bucle for anticuado.
Inténtalo Tú Mismo
Python Filter
filter también acepta dos parámetros, pero la diferencia es que la función parametrizada que pasa debe devolver un True condicional o False. El filtro ejecuta esta función contra cada elemento, y si se evalúa como True, almacena el elemento en un nuevo iterable. De lo contrario, se salta. Este nuevo gestor iterable regresó al final del proceso. Entonces, por ejemplo, puede filtrar una lista de números y devolver una nueva lista que contenga solo los números pares:
Inténtalo Tú Mismo
Python Reduce
reduce también acepta una función y un iterable, pero en lugar de devolver un nuevo iterable, devuelve un único valor que representa el efecto acumulativo de la función que se ejecuta en cada elemento. En Python 3.x, debe importar reduce agregando la siguiente línea en la parte superior de su código: desde functools import reduce
Inténtalo Tú Mismo
Python Lambda vs. Funciones Normales
Lambda no pertenece a la misma familia de funciones puras que mapear, filtrar y reducir. Es solo una forma abreviada de realizar las operaciones de una función sin tener que definir la función con def.
Inténtalo Tú Mismo
Ejercicios de programación en Python
Resuelva los siguientes problemas, utilizando todo lo que ha aprendido hasta este punto. Siéntase libre de compartir mejores soluciones en los comentarios. Optimice cada solución, tanto como sea posible.
-
Escriba una función de mapa de Python que acepte un diccionario y devuelva un objeto JSON. Ejecute la función de mapa con la siguiente lista de diccionarios e imprima los resultados en la consola.
Entrada:
biblioteca = [{ 'titulo': 'Nineteen Eighty-Four', 'autor': 'George Orwell', 'pais': 'Reino Unido', 'paginas': 328, 'generos': ['distopico', 'ficcion politica'], 'editor': { 'nombre': 'Secker & Warburg', 'fecha': '1949-06-08 00:00:00'} }, { 'titulo': 'Do Androids Dream of Electric Sheep?', 'autor': 'Phillip K. Dick', 'pais': 'Estados Unidos', 'paginas': 210, 'generos': ['ciencia ficcion', 'ficcion filosofica'], 'editor': {'nombre': 'Doubleday', 'fecha': '1968-00-00 00:00:00'} }, { 'titulo': 'Snow Crash', 'autor': 'William Gibson', 'pais': 'Estados Unidos', 'paginas': 271, 'generos': ['ciencia ficcion'], 'editor': {'nombre': 'Ace', 'fecha': '1984-07-01 00:00:00'} }]
Rendimiento esperado: ['{"titulo": "Nineteen Eighty-Four", "autor": "George Orwell", "pais": "Reino Unido", "paginas": 328, "generos": ["distopico", "ficcion politica"], "editor": {"nombre": "Secker & Warburg", "fecha": "1949-06-08 00:00:00"}}', '{"titulo": "Do Androids Dream of Electric Sheep?", "autor": "Phillip K. Dick", "pais": "Estados Unidos", "paginas": 210, "generos": ["ciencia ficcion", "ficcion filisofica"], "editor": {"nombre": "Doubleday", "fecha": "1968-00-00 00:00:00"}}', '{"titulo": "Snow Crash", "autor": "William Gibson", "pais": "Estados Unidos", "paginas": 271, "generos": ["ciencia ficcion"], "editor": {"nombre": "Ace", "fecha": "1984-07-01 00:00:00"}}']
-
Con el siguiente archivo csv, escriba una función de mapa de Python que reemplace todas las instancias de "M" por "m" y todas las instancias de "F" por "f" y guarde el resultado en un nuevo archivo csv
Entrada:
id,nombre,nombre,city,state,zip,dob,gender 382,John,Doe,New York City,New York,10003,1959/05/23,M 121,Jane,Doe,Paris,France,75000,1964/03/03,F 329,Jack,Doe,Tokyo,Japan,100-0004,1961/07/15,M 119,James,Doe,Ulaanbaatar,Mongolia,14200,1999/08/15,M 124,Jamie,Doe,Casablanca,Morocco,20000,2000/12/10,F
Rendimiento esperado:
id,nombre,nombre,city,state,zip,dob,gender 382,John,Doe,New York City,New York,10003,1959/05/23,m 121,Jane,Doe,Paris,France,75000,1964/03/03,f 329,Jack,Doe,Tokyo,Japan,100-0004,1961/07/15,m 119,James,Doe,Ulaanbaatar,Mongolia,14200,1999/08/15,m 124,Jamie,Doe,Casablanca,Morocco,20000,2000/12/10,f
-
Escriba una función de filtro de Python que mantenga a todos los usuarios que viven en Nueva York de la siguiente lista de diccionarios
Entrada:
registros = [{ 'id': '1', 'nombre': 'John Doe', 'city': 'New York' }, { 'id': '2', 'nombre': 'Jane Doe', 'city': 'New York' }, { 'id': '3', 'nombre': 'Jack Doe', 'city': 'Florence' }, { 'id': '4', 'nombre': 'James Doe', 'city': 'Hong Kong' }, { 'id': '5', 'nombre': 'Jamie Doe', 'city': 'Sydney' }]
Rendimiento esperado: [{'id': '1', 'nombre': 'John Doe', 'city': 'New York'}, {'id': '2', 'nombre': 'Jane Doe', 'city': 'New York'}]
-
Escriba una función de filtro de Python que elimine los libros publicados antes de 1969 de la siguiente lista
Entrada:
biblioteca = [{ 'titulo': 'Nineteen Eighty-Four', 'autor': 'George Orwell', 'pais': 'Reino Unido', 'paginas': 328, 'generos': ['distopico', 'ficcion politica'], 'editor': { 'nombre': 'Secker & Warburg', 'fecha': '1949-06-08 00:00:00' } }, { 'titulo': 'Do Androids Dream of Electric Sheep?', 'autor': 'Phillip K. Dick', 'pais': 'Estados Unidos', 'paginas': 210, 'generos': ['ciencia ficcion', 'ficcion filosofica'], 'editor': {'nombre': 'Doubleday', 'fecha': '1968-01-01 00:00:00'} }, { 'titulo': 'Snow Crash', 'autor': 'William Gibson', 'pais': 'Estados Unidos', 'paginas': 271, 'generos': ['ciencia ficcion'], 'editor': {'nombre': 'Ace', 'fecha': '1984-07-01 00:00:00'} }]
Rendimiento esperado: [{'titulo': 'Nineteen Eighty-Four', 'autor': 'George Orwell', 'pais': 'Reino Unido', 'paginas': 328, 'generos': ['distopico', 'ficcion politica'], 'editor': {'nombre': 'Secker & Warburg', 'fecha': '1949-06-08 00:00:00'}}, {'titulo': 'Do Androids Dream of Electric Sheep?', 'autor': 'Phillip K. Dick', 'pais': 'Estados Unidos', 'paginas': 210, 'generos': ['ciencia ficcion', 'ficcion filosofica'], 'editor': {'nombre': 'Doubleday', 'fecha': '1968-01-01 00:00:00'}}]
-
Escriba una función de filtro de Python que mantenga a todos los usuarios entre las edades de 18 a 35 del siguiente csv y guarde el resultado en un nuevo archivo csv
Entrada:
id,nombre,nombre,city,state,zip,age,gender 382,John,Doe,New York City,New York,10003,54,M 121,Jane,Doe,Paris,France,75000,48,F 329,Jack,Doe,Tokyo,Japan,100-0004,10,M 119,James,Doe,Ulaanbaatar,Mongolia,14200,25,M 124,Jamie,Doe,Casablanca,Morocco,20000,20,F
Rendimiento esperado:
id,nombre,nombre,city,state,zip,age,gender id,nombre,nombre,city,state,zip,age,gender 119,James,Doe,Ulaanbaatar,Mongolia,14200,25,M 124,Jamie,Doe,Casablanca,Morocco,20000,20,F
Commentarios
Debes iniciar sesión para comentar. ¿No tienes una cuenta? Registrate gratis.
Subscribe to comments for this post
Info