No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filter

23/44
Recursos

Aportes 71

Preguntas 13

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

FILTER
La función filter(), devuelve un valor que esta siendo iterado de la cual su resultado será el valor que se esta buscando en el filter

SINTAXIS

_filter (function, iterable_

Valores.

filter: Una función que se ejecutara para cada elemento iterable
iterable: Lo que se va a filtrar.

Ejercicio:

Tenemos una lista de estudiantes de la cual debemos saber quienes son de Colombia y quienes son considerados mayores de edad al tener igual o mas de 18 años y cuantos son.

people = [
  {
    'name' : 'Pedro',
    'country': 'Colombia',
    'age' : 18,
    'course' : 'developer'
  },
  {
    'name' : 'Juan',
    'country': 'Perú',
    'age' : 17,
    'course' : 'UX'
  },
  {
    'name' : 'Carlos',
    'country': 'Chile',
    'age' : 31,
    'course' : 'Diseño'
  },
  {
    'name' : 'Ana Maria',
    'country': 'Colombia',
    'age' : 25,
    'course' : 'Tester'
  }
]
  • Ahora planteamos el primer problema a resolver, cuales son los estudiantes de Colombia y cuantos son:
countrie = list(filter(lambda country: country['country'] == 'Colombia', people))
print(countrie)
print(len(countrie))
_Produccion:_
[{'name': 'Pedro', 'country': 'Colombia', 'age': 18, 'course': 'developer'}, {'name': 'Ana Maria', 'country': 'Colombia', 'age': 25, 'course': 'Tester'}]
2

Ya sabemos que hay 2 personas en nuestros cursos que son de Colombia quienes son: Pedro y Ana Maria.

  • Ahora necesitamos saber quienes son considerados mayores de edad al tener 18 años o más.
adult = list(filter(lambda age: age['age'] >= 18, people))
print(adult)
print(len(adult))
_Producción:_
[{'name': 'Pedro', 'country': 'Colombia', 'age': 18, 'course': 'developer'}, {'name': 'Carlos', 'country': 'Chile', 'age': 31, 'course': 'Diseño'}, {'name': 'Ana Maria', 'country': 'Colombia', 'age': 25, 'course': 'Tester'}]
3

Con esto podemos saber que hay 3 estudiantes que son considerados mayores de edad al tener 18 años o más quienes serían: Pedro con 18 años, carlos, con 31 años y Ana Maria con 25 años.

Dejo el código aquí para un mejor acceso:

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

me parecio curioso como se veria la misma formulacion pero con la funcion map, me retorna la lista con valores boolean

numbers = [1, 2, 3, 4, 5]
new_numbers = list(map(lambda x: x %2==0, numbers))

[False, True, False, True, False]

Soy de Venezuela y me resulta insultante que Ecuador nos haya ganado 5 a 0. 😤🤣

Hay que tomar en cuenta que filter, map y reduce retornan generadores, no listas.
Por lo que a la hora de trabajar con ellas a veces conviene convertirlas, ya sea con:
list(filter(…))
o con [*filter(…)]

Dejo algunos programas sencillos usando lambdas y filter.

"""
1. Filtrar números pares de una lista de enteros.
"""

lista = [1,2,3,4,5,6,7,8,9,10]
resultado = list(filter(lambda pares:pares%2==0,lista))
print(resultado)

"""
2. Filtrar números primos de una lista de enteros.
"""

def es_primo(numero):
    if numero <= 1:
        return False
    for i in range(2, int(numero ** 0.5) + 1):
        if numero % i == 0:
            return False
    return True

lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
resultado = list(filter(es_primo, lista))
print(resultado)

"""
3. Filtrar palabras que comienzan con una letra específica de una lista de palabras.
"""

lista = ["Mercurio", "Venus", "Tierra", "Marte", "Jupiter"]
resultado = list(filter(lambda palabra:(palabra.lower().startswith("m")),lista))
print(resultado)

"""
4. Filtrar nombres de una lista de nombres que tengan más de cierta cantidad de letras.
"""

lista = ["Ana","Juan","Laura","Ramiro","Mario"]
resultado = list(filter(lambda palabra:len(palabra)>5,lista))
print(resultado)

"""
5. Filtrar elementos de una lista de strings que tienen una longitud impar.
"""

lista = ["Ana","Juan","Laura","Ramiro","Mario"]
resultado = list(filter(lambda palabra:len(palabra)%2!=0,lista))
print(resultado)

"""
6. Filtrar los elementos de una lista de diccionarios para obtener aquellos cuyo valor de la clave "edad" sea mayor que 30.
"""

lista = [ {
            'nombre' : 'Patricia',
            'edad': 28 
          },
          { 
            'nombre' : 'Marco',
            'edad': 32
          },
         { 
            'nombre' : 'Laura',
            'edad': 25
          },
         { 
            'nombre' : 'Ramiro',
            'edad': 46
          }
        ]


resultado = list(filter(lambda palabra:palabra['edad']>30,lista))
print(resultado)

"""
7. Filtrar los elementos de una lista de diccionarios para obtener aquellos que contienen una clave "categoria" con un valor específico.
"""

lista = [ {
            'pelicula' : 'saw',
            'genero': 'terror'
          },
          { 
            'pelicula' : 'one day',
            'genero': 'romance'
          },
         { 
            'pelicula' : 'hangover',
            'genero': 'comedia'
          },
         { 
            'pelicula' : 'mi vecino totoro',
            'genero': 'animada'
          }
        ]


resultado = list(filter(lambda pelicula:pelicula['genero']=="terror",lista))
print(resultado)

Con dos condiciones:

saber si es de Perú y si es mayor de edad.

new_people = list(filter(lambda condic1 : condic1['country'] == 'Perú' and condic1['age'] > 18, people))
print(new_people)
print(len(new_people))

Production:
[]
0

No existe persona que cumpla esos requisitos 😢.
Gracias Camilo Enrique Mejia me ayudó tu aporte.

Algo a tener en cuenta, es que al usar usar filter, nos devolverá los mismos objetos que teniamos en nuestro iterable original, por lo tanto si se modifica un objeto filtrado afectará a ambos iterables (el filtrado y el original)

La función filter() es una función integrada que se utiliza para filtrar una secuencia (como una lista o un diccionario) y retornar los elementos que cumplen con cierta condición. La función filter() toma dos argumentos: una función que se utilizará para evaluar cada elemento de la secuencia, y la secuencia que se va a filtrar.

  • La función que se utiliza con filter() debe tomar un elemento como entrada y retornar True o False según si el elemento debe ser incluido en el resultado filtrado. Los elementos que retornan True se incluyen en el resultado, mientras que los elementos que retornan False se excluyen.
  • Python’s filter()es una función incorporada que le permite procesar un iterable y extraer aquellos elementos que satisfacen una condición dada. Este proceso se conoce comúnmente como una operación de filtrado .
  • Con filter(), puede aplicar una función de filtrado a un iterable y producir un iterable nuevo con los elementos que satisfacen la condición en cuestión. En Python, filter()es una de las herramientas que puedes usar para la programación funcional .

Aca les dejo una idea muy grafica de filter

articulos = \[    {'producto': 'camisa', 'sector': 'ropa'},    {'producto': 'pantalón', 'sector': 'ropa'},    {'producto': 'corbata', 'sector': 'ropa'},    {'producto': 'medias', 'sector': 'ropa'},    {'producto': 'cocina', 'sector': 'electrodomesticos'},    {'producto': 'microhondas', 'sector': 'electrodomesticos'},    {'producto': 'sartén', 'sector':'bazar'},    {'producto': 'lavarropas', 'sector': 'electrodomesticos'},    {'producto': 'platos', 'sector': 'bazar'},    {'producto': 'cubiertos', 'sector': 'bazar'},    {'producto': 'toallas', 'sector': 'blanqueria'},    {'producto': 'almohadas', 'sector': 'blanqueria'},    {'producto': 'cortina', 'sector': 'blanqueria'},] print(len(articulos)) ropa = list(filter(lambda item: item\['sector'] == 'ropa', articulos))print('articulos ropa'),print(ropa)print(len(ropa)) blanqueria = list(filter(lambda item: item\['sector'] == 'blanqueria', articulos))print('articulos blanqueria'),print(blanqueria)print(len(blanqueria)) bazar = list(filter(lambda item: item\['sector'] == 'bazar', articulos))print('articulos bazar'),print(bazar)print(len(bazar)) electrodomesticos = list(filter(lambda item: item\['sector'] == 'electrodomesticos', articulos))print('articulos electrodomesticos'),print(electrodomesticos)print(len(electrodomesticos))

La función filter devuelve un iterador donde los elementos se filtran a través de una función para probar si el elemento se acepta o no.

numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)
print(numbers)

Mi aporte sin ver la lección…

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print("-"*10)

no_draw_results_list = list(filter(lambda item: item['home_team_result'] != "Draw" , matches))
print(no_draw_results_list)

home_team_winner_list = list(filter(lambda item: item["home_team_result"] == "Win" , no_draw_results_list))
print(home_team_winner_list)

away_team_winner_list = list(filter(lambda item: item["home_team_result"] == "Lose" , no_draw_results_list))
print(away_team_winner_list)

home_team_winner = list(map(lambda item: item["home_team"], home_team_winner_list))
print(home_team_winner)

away_team_winner = list(map(lambda item: item["away_team"], away_team_winner_list))
print(away_team_winner)

El filter() es una función incorporada en Python que permite filtrar los elementos de un objeto iterable (como una lista, tupla o diccionario) basándose en una función que devuelve True o False.

La función filter() recibe dos argumentos:

La función: Esta es la función que testeamos en cada elemento del objeto iterable. Debe devolver True si el elemento se debe mantener, False si se debe descartar.
El iterable: El objeto iterable que queremos filtrar.
Por ejemplo:

python

Copy code

numeros = [1, 2, 3, 4, 5, 6]

def es_par(x):
return x % 2 == 0

pares = filter(es_par, numeros)

print(list(pares))
Esto filtraría la lista de números para quedarse solo con los números pares, imprimiendo [2, 4, 6].

La función filter() devuelve un objeto filter, que es un iterable. Por eso debemos pasarlo a una lista para ver el resultado.

En resumen, filter() es una función de Python muy útil para filtrar elementos de una secuencia, dejando solo los que cumplen cierta condición definida en una función

Excelente clase, todo bastante bien explicado y entendible.

numbers = [1,2,3,4,5,6,7,8,9,10]
pares = list(filter(lambda x: x % 2 ==0,numbers))
impares = list(filter(lambda x:x%2 != 0,numbers))
print(pares) 
print(impares)

Tambien podemos utilizar los marcadores y no depender del campo de result:

new_list_2 = list(filter(lambda item: item['home_team_score'] > item['away_team_score'], matches))

Algo muy interesante que se puede hacer con la función filter, es crear un algoritmo para crear una lista de números perfectos. Los números perfectos son aquellos cuyo valor es igual a la suma de sus divisores (p.e. Los divisores de 6 son 1, 2 y 3, y al sumarlos 1+2+3 = 6). Los 5 primeros números perfectos son [6, 28, 496, 8128, 550336]. Para este caso decidí configurar el algoritmo para mostrar los primeros 4 números perfectos, ya que al intentar hacer mas 550 mil iteraciones casi quemo mi CPU xD. Aqui les dejo mi aporte:

def is_perfect(n):
    divisors = list(filter(lambda i: n%i == 0, list(range(1,n))))
    sum = 0
    for i in divisors:
        sum += i
    if sum == n:
        return True
    else:
        return False

perfects = list(filter(is_perfect,list(range(1,8130))))
print(perfects)
output:
[6, 28, 496, 8128]

Filter es similar a utlizar un for para recorrer el array y un condicional para decidir cuales elementos cumplen la condicion y almacenarlos en un nuevo array. Bastante util para simplificar el codigo!

TIP: cómo saber dónde está nuestro error:
El Shell de replit indica la línea y pone una flechita en donde encontró el error, en este caso observa que la flechita apunta antes de la función list:

También te dice en qué número de línea está el error, line.
Y si vas al Editor, te subraya errores. Observa que también empieza a subrayar en rojo al inicio de la función list:

En general, para depurar errores de Python, debemos comenzar de abajo hacia arriba. Lo digo porque a veces se apilan varios errores, pero el error más cercano o directo será el de hasta abajo del Shell. En este ejemplo solo hubo un error.
Con esta info ya vamos más encaminados a encontrarlo.
Faltó el = de asignación antes del list.
Espero sea útil, saludos. 😄

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]
print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
Excelente esta clase!
Adjunto ejercicio de lista de artículos filtrado por precio y por sección articulos = \[ { 'producto' : "Camisa", 'precio': 100, 'sector': "Ropa" }, { 'producto' : "Televisor", 'precio': 4560, 'sector': "Electrodomesticos" }, { 'producto': "Celular", 'precio': 3500, 'sector': "Tecnologia" }, { 'producto': "Pantalon", 'precio': 400, 'sector': "Ropa" }, { 'producto': "Computador", 'precio': 5000, 'sector': "Tecnologia" }, { 'producto': "Camisa", 'precio': 100, 'sector': "Ropa" } ] print(articulos) print(len(articulos)) \# filtro por sector en este caso el sector de ropa sectores = list(filter(lambda item: item\['sector'] == "Ropa", articulos)) print(sectores) \#filtrar por precio mayor a 400 precios = list(filter(lambda item: item \['precio']>400, articulos)) print(precios)
Aquí realicé un ejercicio que tal vez pueden tomar como ejemplo. it\_jobs = \[  {    'name': 'pedro',    'position': 'QA Tester',    'company': 'Nvidia',    'salary': 85000,    'country': 'Perú'  },  {    'name': 'juan',    'position': 'Data Analyst',    'company': 'Santander Bank',    'salary': 97000,    'country': 'Brasil'  },  {    'name': 'julián',    'position': 'Software Developer',    'company': 'Nvidia',    'salary': 91000,    'country': 'Argetina'  },  {    'name': 'francisco',    'position': 'Product Owner',    'company': 'Mercado Libre',    'salary': 89100,    'country': 'Colombia'  },]print(it\_jobs)print(len(it\_jobs))salary\_list = list(filter(lambda salary: salary\['salary'] >= 90000, it\_jobs)) print(salary\_list)print(len(salary\_list)) Recuerden que filter (o filtros) "a partir de una lista o iterador y una función condicional, es capaz de devolver una nueva colección con los elementos filtrados que cumplan la condición." Y su **sintaxis** es simple: list(filter(función : iterable . . . Aquí va mi ejemplo: ```js it_jobs = [ { 'name': 'pedro', 'position': 'QA Tester', 'company': 'Nvidia', 'salary': 85000, 'country': 'Perú' }, { 'name': 'juan', 'position': 'Data Analyst', 'company': 'Santander Bank', 'salary': 97000, 'country': 'Brasil' }, { 'name': 'julián', 'position': 'Software Developer', 'company': 'Nvidia', 'salary': 91000, 'country': 'Argentina' }, { 'name': 'francisco', 'position': 'Product Owner', 'company': 'Mercado Libre', 'salary': 89100, 'country': 'Colombia' }, ] ```Luego de eso, usé el ejemplo del profesor para aplicar los prints que me ayudan a contabilizar los elementos: ```js print(it_jobs) print(len(it_jobs)) ```Ahora sí, paso a resolver el problema: ```js salary_list = list(filter(lambda salary: salary['salary'] >= 90000, it_jobs)) print(salary_list) print(len(salary_list)) ```Y el resultado es este: ```js [{'name': 'juan', 'position': 'Data Analyst', 'company': 'Santander Bank', 'salary': 97000, 'country': 'Brasil'}, {'name': 'julián', 'position': 'Software Developer', 'company': 'Nvidia', 'salary': 91000, 'country': 'Argentina'}] 2 ```\[{'name': 'juan', 'position': 'Data Analyst', 'company': 'Santander Bank', 'salary': 97000, 'country': 'Brasil'}, {'name': 'julián', 'position': 'Software Developer', 'company': 'Nvidia', 'salary': 91000, 'country': 'Argetina'}] 2
resumen * función filter retorna una lista nueva donde están los items que cumplen la condición de filtrado * la función filter no modifica la lista repositorio <https://github.com/angel20125/python-2-comprehension-functions-2024> ![](https://static.platzi.com/media/user_upload/clase%2023-funcion-filter-ae856583-6ce8-453a-9cce-fe67eed8b605.jpg)
La función filter en Python toma una función y una lista como argumentos. Esta función retorna una nueva lista que contiene solo los elementos de la lista original para los cuales la función devuelve True. numeros = \[1, 2, 3, 4, 5] pares = list(filter(lambda x: x % 2 == 0, numeros)) print(pares)  # Salida: \[2, 4] **Usar funciones lambda:** A menudo, filter se usa con funciones lambda, que son pequeñas funciones anónimas. En el ejemplo anterior, lambda x: x % 2 == 0 es una función lambda que devuelve True para números pares. **No olvides convertir el resultado a una lista:** La función filter devuelve un objeto filter que es un iterador. Para obtener una lista, necesitas convertir el resultado usando la función list. **Usar filter con diferentes tipos de datos:** filter no está limitado a listas de números. Puedes usarlo con cualquier tipo de lista. Por ejemplo, puedes usar filter para filtrar elementos específicos en una lista de cadenas. palabras = \['manzana', 'banana', 'cereza', 'datil'] palabras\_con\_a = list(filter(lambda x: 'a' in x, palabras)) print(palabras\_con\_a)  # Salida: \['manzana', 'banana', 'cereza'] **Usar filter para filtrar objetos personalizados:** También puedes usar filter para filtrar una lista de objetos personalizados. Solo necesitas proporcionar una función que tome un objeto de tu lista como entrada y devuelva True o False.
me puede explicar me quede rayado
```python matches = [ { 'home_team': 'Bolivia', 'away_team': 'Uruguay', 'home_team_score': 3, 'away_team_score': 1, 'home_team_result': 'Win' }, { 'home_team': 'Brazil', 'away_team': 'Mexico', 'home_team_score': 1, 'away_team_score': 1, 'home_team_result': 'Draw' }, { 'home_team': 'Ecuador', 'away_team': 'Venezuela', 'home_team_score': 5, 'away_team_score': 0, 'home_team_result': 'Win' }, ] print(matches) print(len(matches)) new_list = list(filter(lambda item: item['home_team_result'] =='win',matches)) print(new_list) print(len(matches)) ```matches = \[ { 'home\_team': 'Bolivia', 'away\_team': 'Uruguay', 'home\_team\_score': 3, 'away\_team\_score': 1, 'home\_team\_result': 'Win' }, { 'home\_team': 'Brazil', 'away\_team': 'Mexico', 'home\_team\_score': 1, 'away\_team\_score': 1, 'home\_team\_result': 'Draw' }, { 'home\_team': 'Ecuador', 'away\_team': 'Venezuela', 'home\_team\_score': 5, 'away\_team\_score': 0, 'home\_team\_result': 'Win' }, ] print(matches) print(len(matches)) new\_list = list(filter(lambda item: item\['home\_team\_result'] =='win',matches)) print(new\_list) print(len(matches))
La referencia de memoria en Python se refiere al mecanismo utilizado para acceder y manipular objetos en la memoria del sistema. Cuando trabajas con variables en Python, en realidad estás manejando referencias a objetos almacenados en la memoria en lugar de los objetos directamente. Entender cómo funcionan las referencias de memoria es fundamental para comprender el comportamiento de asignación y manejo de objetos en Python. Concepto Básico de Referencia de Memoria En Python, cada variable que defines es una referencia a un objeto en la memoria. Cuando asignas un valor a una variable, en realidad estás creando una referencia a ese objeto. Por ejemplo: x = 42 En este caso, x es una referencia al objeto entero 42 que se almacena en la memoria. Puedes pensar en x como un "nombre" dado a ese objeto en la memoria. Características Clave de las Referencias de Memoria Asignación de Variables: Cuando asignas un valor a una variable en Python, en realidad estás creando una referencia a ese valor en la memoria. x = 10 y = x # y ahora es una referencia al mismo objeto que x Identidad de Objetos: Cada objeto en Python tiene una identidad única que se puede obtener utilizando la función id(). La identidad de un objeto es su dirección de memoria en hexadecimal. a = \[1, 2, 3] b = \[1, 2, 3] print(id(a)) # Identidad del objeto referenciado por 'a' print(id(b)) # Identidad del objeto referenciado por 'b' Referencias Compartidas: Cuando varias variables apuntan al mismo objeto, se dice que comparten referencias. lista1 = \[1, 2, 3] lista2 = lista1 # 'lista2' ahora es una referencia a la misma lista que 'lista1' Modificación de Objetos Mutables: Cuando trabajas con objetos mutables (como listas, diccionarios, conjuntos), ten en cuenta que las modificaciones pueden afectar a todas las variables que hacen referencia al mismo objeto. lista1 = \[1, 2, 3] lista2 = lista1 lista1.append(4) print(lista2) # Esto imprimirá \[1, 2, 3, 4] porque 'lista2' referencia al mismo objeto que 'lista1' Gestión de Memoria y Recolección de Basura Python utiliza un sistema de gestión automática de memoria y recolección de basura para administrar las referencias y liberar memoria de objetos no utilizados. Cuando una variable deja de referenciar a un objeto (por ejemplo, cuando la variable se redefine o se elimina), el recolector de basura de Python puede liberar automáticamente la memoria utilizada por ese objeto si no hay otras referencias a él. Esto es útil para evitar fugas de memoria y simplificar el manejo de la memoria en Python. En resumen, la referencia de memoria en Python es un concepto fundamental que subyace en cómo se manejan y manipulan los objetos en la memoria del sistema. Comprender las referencias de memoria te permite escribir código más efectivo y comprender mejor el comportamiento de Python en relación con el uso de la memoria.
Interesante, me ha encantado esta función. Dejo unos ejemplos que hice: ```python # Ejemplo mio numeros = [249, 289, 172, 279, 167, 304, 221, 259, 193, 307] es_par = lambda x: (x % 2 ) == 0 numeros_pares = tuple(filter(es_par, numeros)) print(numeros_pares) print('█' * 5) # Ejemplo mio my_list = [True, False, None, True, False, None, True, False, None, True, False, None, True, False, None] es_None = lambda x: x == None nones = tuple(filter(es_None, my_list)) print(nones) print('█' * 5) # otro ejemplo mio nombres = ['Emilio', 'Sofía', 'Valeria', 'Olivia', 'Sebastián', 'Lucía', 'Diego', 'Emma', 'Alejandro', 'Mateo'] filtro_nombres = lambda x: any(letra in x.lower() for letra in ['u']) nombres_filtrados = tuple(filter(filtro_nombres, nombres)) print(nombres_filtrados) ```

Ejemplo, usando lambda con filter()

También puedes usar funciones lambda junto con ´filter()´ para aplicar criterios de filtro simples de manera más concisa:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = filter(lambda x: x % 2 == 0, numeros)

print(list(pares))  # Output: [2, 4, 6, 8]

Aquí, la función lambda lambda x: x % 2 == 0 se aplica a cada elemento de numeros usando filter() para filtrar los números pares.

Ejemplo básico de filter()

def es_par(numero):
    return numero % 2 == 0

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = filter(es_par, numeros)

print(list(pares))  # Output: [2, 4, 6, 8]

Filter() es una función integrada de Python que toma dos argumentos: una función de filtro y un iterable. Aplica la función de filtro a cada elemento del iterable y devuelve un iterador que produce solo los elementos para los cuales la función de filtro devuelve True.

Buenas. Un pequeño ejemplo ```js ages = [5, 12, 17, 18, 24, 32] print('Edad de personas',ages) def my_funtion(x): if x > 18 : return True else : return False adults = list(filter(my_funtion, ages)) print('personas mayores') print(adults) menores = adults = list(filter(lambda x : not my_funtion(x), ages)) print('personas menores') print(menores) ```
```js ```
Buen ejemplo y explicación de la clase
Hola a todos, les dejo el codigo que hice para aplicar una condicion y que muestre el resultado del equipo ganador:new\_list = list(filter(lambda item: print(f"the team {item\['home\_team']} wins") if item\['home\_team\_result'] == 'Win' else (print(f"the team  {item\['home\_team']} Drawn") if item\['home\_team\_result'] == 'Draw' else print(f"the team {item\['away\_team']} wins")), matches))print(new\_list) ```js new_list = list(filter(lambda item: print(f"the team {item['home_team']} wins") if item['home_team_result'] == 'Win' else (print(f"the team {item['home_team']} Drawn") if item['home_team_result'] == 'Draw' else print(f"the team {item['away_team']} wins")), matches)) print(new_list) ```
Espero les guste mi aportación :3 ```js ''' Este programa a partir de una lisra original genera otra con base en un filtro que discrimina sus elementos ''' # lista_original menu = [ # apto para veganos = APV { "alimento": "Hamburguesa", "APV": False }, { "alimento": "Papas fritas", "APV": True }, { "alimento:": "Nuggets de pollo", "APV": False }, { "alimento:": "Aros de cebolla", "APV": True }, { "alimento:": "Alitas picosas", "APV": False }, { "alimento:": "Refresco de cola", "APV": True }, { "alimento:": "Pie de manzana", "APV": False }, { "alimento:": "Helado de vainilla", "APV": False } ] # lista_filtrada menu_vegano = list(filter(lambda elemento_comparativo : elemento_comparativo["APV"] == True, menu)) # imprimimos los menúes print(f"\n\nEl menú de McBurguesas es: {menu}\n\n") print("\n\n** APV es Apto Para Veganos **\n\n") print(f"\n\nEl menú vegano consta de: {menu_vegano}\n\n") ```'''Este programa a partir de una lisra original genera otra con base en un filtroque discrimina sus elementos'''# lista\_original menu = \[    # apto para veganos = APV    {        "alimento": "Hamburguesa",        "APV": False    },    {        "alimento": "Papas fritas",        "APV": True    },    {        "alimento:": "Nuggets de pollo",        "APV": False    },    {        "alimento:": "Aros de cebolla",        "APV": True    },    {        "alimento:": "Alitas picosas",        "APV": False    },    {        "alimento:": "Refresco de cola",        "APV": True    },    {        "alimento:": "Pie de manzana",        "APV": False    },    {        "alimento:": "Helado de vainilla",        "APV": False    }] \# lista\_filtrada menu\_vegano = *list*(filter(*lambda* *elemento\_comparativo* : elemento\_comparativo\["APV"] == True, menu)) \# imprimimos los menúesprint(*f*"\n\nEl menú de McBurguesas es: {menu}\n\n")print("\n\n\*\* APV es Apto Para Veganos \*\*\n\n")print(*f*"\n\nEl menú vegano consta de: {menu\_vegano}\n\n")
esta bien saber eso, pero me parece que las list comprehension cumplen la misma funcion
# FILTER
# filter(function, iterable)
win_list = list(filter(lambda i: i['home_team_result'] == 'Win', matches))
print(win_list)
print(len(win_list)) # 2

# LIST COMPREHENSION
# [expression for item in iterable if condition]
win_list_2 = [i for i in matches if i['home_team_result'] == 'Win']
print(win_list_2)
print(len(win_list_2)) # 2
people = [
    {'name': 'Pedro'     , 'country': 'Colombia' , 'age': 18 , 'course': 'developer'},
    {'name': 'Juan'      , 'country': 'Perú'     , 'age': 17 , 'course': 'UX'},
    {'name': 'Carlos'    , 'country': 'Chile'    , 'age': 31 , 'course': 'Diseño'},
    {'name': 'Ana Maria' , 'country': 'Colombia' , 'age': 25 , 'course': 'Tester'}
]

# Utilizando comprensión de lista para filtrar estudiantes de Colombia
colombian_students = [person for person in people if person['country'] == 'Colombia']
adult_students     = [person for person in people if person['age']     >= 18]

# Imprime el resultado
print(colombian_students)
print(adult_students)

Es interesante la forma de usar nuestro codigo de python con el reduce para simplificar nuestros ejercicios. Eso nos ayuda a mejorar nuestra capacidad. Espero seguir mejorando con la parte de mas adelante.

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

winners = list(map(lambda x : x ["home_team_result"] == "Win", matches))
print(winners)
# Filter

# https://www.w3schools.com/python/ref_func_filter.asp


numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # Se escribe la condición del filter (x % 2 == 0)
print(new_numbers) # Se imprimen solo los que cumplen con la condición
print(numbers)
# Filter en un diccionario

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches)) # Se hace el filtro de los elementos

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
En los recursos no aparece nada

Les comparto la forma que utilicé para poder resolver el ejericio, usando dictionary comprehensions, una función normal y la función filter con condicionales!

# 1. Dict comprenhensions:
def filtro(matches):
  return [match['home_team'] for match in matches if match['home_team_result'] == 'Win']

# 2. Función de toda la vida
def filtro2(matches):
  result = []
  for x in matches:
    if x['home_team_result'] == 'Win':
      result.append(x['home_team'])
  return list(result)


# 3. Filtrando con filter y trayendo todos los datos del dict
result = list(filter(lambda x: x['home_team'] if x['home_team_result'] == 'Win' else None , matches ))

print(filtro(matches))
print(filtro2(matches))
print(result)
print(matches)
la sección de recursos esta vacía

numeros = [1,2,3,4,5]
nuevos_numeros = list(filter( lambda x: x % 2 == 0 , numeros))
print (numeros)
print (nuevos_numeros)

matches = [
{
‘home_team’: ‘Bolivia’,
‘away_team’: ‘Uruguay’,
‘home_team_score’: 3,
‘away_team_score’: 1,
‘home_team_result’: ‘Win’
},
{
‘home_team’: ‘Brazil’,
‘away_team’: ‘Mexico’,
‘home_team_score’: 1,
‘away_team_score’: 1,
‘home_team_result’: ‘Draw’
},
{
‘home_team’: ‘Ecuador’,
‘away_team’: ‘Venezuela’,
‘home_team_score’: 5,
‘away_team_score’: 0,
‘home_team_result’: ‘Win’
},
]

print(matches)

cantidad de elementos

print(len(matches))

new_list = list(filter(lambda item: item[‘home_team_result’] == ‘Win’, matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Por si preguntaban cual sería el código para calcular una lista de solo el nombre de los ganadores

print('---winners---')
winners=[]
for i in range(0,int(len(new_list))):
  winners.append(new_list[i]['home_team'])
print(winners)

Les comparto una funcion que hice para facilitar la parte visual de los resultados en la consola

def printDic(data):
    for dic in data:
        print('{')
        for key, value in dic.items():
            print(' ', key, ":", value)
        print("}")

#print(matches)
printDic(matches)

Antes de iniciar la clase hice un código con lambda para entender fácilmente la función filter():

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numero = list(filter(lambda numero: numero % 2 == 0, numeros))
print(numero)

Dejo aqui un ejemplo con un def normal 🏃‍♀️

# Definimos una función para verificar si un número es par
def es_par(numero):
    return numero % 2 == 0

# Creamos una lista de números
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Filtramos los números pares utilizando filter() y la función es_par
numeros_pares = list(filter(es_par, numeros))

# Imprimimos los números pares
print(numeros_pares)

Super empezamos primeros pasos de bases de datos 🐧


matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print('partidos =>', len(matches))
print('''
''')
#Filtramos solo los partidos locales ganadores (FILTER)
win_matches = list(filter(lambda item: item['home_team_result'] == 'Win', matches))
#transformamos los datos de esos partidos para mostrar los paises (MAP)
win_countries = list(map(lambda item: item['home_team'], win_matches))

print('win local countries =>', win_countries)
print(win_matches) #no se modificó win_countries porque no fue una inserción, solo retorna valores y los devuelve en una nueva lista de items.

Para esta clase escribí una lista de números del -20 al 20 generados aleatoriamente y apliqué un filtro para obtener los números que fueran menores que -10 o mayores que 10.

import random

elementos = 10
nunbers = [random.randint(-20,20) for i in range(0,elementos)]
print(nunbers)
filter_numbers = list(filter(lambda i: - 10 > i or i > 10, nunbers))
print(filter_numbers)

Genial el uso del filter. Lo apliqué en los dataframe y la sintaxis del código queda mucho mejor que usar Python base para el filtrado.

Aporte de mis apuntes por si gustan:

matches = [
  {
    'home_team': 'Argentina', #equipo local
    'away_team': 'Uruguay',   #equipo visitante
    'home_team_score': 3,     #goles
    'away_team_score': 1,     #goles
    'home_team_result': 'win' #marcador 
  },
  {
    'home_team': 'Brazil',     #equipo local
    'away_team': 'Mexico',     #equipo visitante
    'home_team_score': 1,      #goles
    'away_team_score': 1,      #goles
    'home_team_result': 'Draw' #marcador 
  },
  {
    'home_team': 'Chile',     #equipo local
    'away_team': 'Colombia',  #equipo visitante
    'home_team_score': 2,     #goles
    'away_team_score': 3,     #goles
    'home_team_result': 'win' #marcador 
  },
]

print(matches) # imprimimos nuestro diccionario
print(len(matches)) # imprimimos la cantidad

# creamos una nueva lista
# preguntamos por un elemento del diccionario
# le enviamos un mensaje al diccionario lo que queremos
new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list) # imprimimos la nueva lista
print(len(new_list)) # imprimimos la cantidad
matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Quise mirar cómo obtener una lista con los nombres de los equipos que ganaron partidos como local y se me ocurrió esto:

  1. Crear un filtro que elija los partidos ganados por el equipo local.
filtro = filter(lambda item : item['home_team_result'] == 'Win', matches)
  1. Usar ese filtro como iterable en un map que retorne el nombre del equipo local ganador
print(list(map(lambda team : team['home_team'], filtro)))

Este es el resultado:

['Bolivia', 'Ecuador']

De igual manera, todo se puede expresar en una sola línea así:

print(list(map(lambda team : team['home_team'], filter(lambda item : item['home_team_result'] == 'Win', matches))))

Apliqué un poco más de lo que ya hemos visto en el curso:

# Librerias
import os
import random

#Funcion para limpiar pantalla
def clean_screen():
    os.system("cls")

clean_screen()

matches = [
  {
    'home_team': 'bolivia',
    'away_team': 'uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'win'
  },
  {
    'home_team': 'brazil',
    'away_team': 'mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'draw'
  },
  {
    'home_team': 'ecuador',
    'away_team': 'venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'win'
  },
]

#print(matches)
#print(len(matches))


# Opciones de inicio
print("Opciones: \n" "\nhome_team: Bolivia, Brazil, Ecuador \n" "\naway_team: Uruguay, Mexico, Venezuela \n" "\nhome_team_result: Win, Draw \n") 

# ingresa la clave del diccionario a filtrar

while True:
    key = input("Ingrese la clave del diccionario a filtrar: ").lower()
    if any(key in item for item in matches):
        break
    else:
        print(f"Por favor ingresa una clave válida para {key}")

# ingresa el valor del diccionario a filtrar
while True:
    value = input("Ingrese el valor del diccionario a filtrar: ").lower()
    if any(value in item[key] for item in matches):
        break
    else:
        print(f"Por favor ingresa un valor válido para {key}")

new_list = list(filter(lambda item: item[key] == value, matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))

Filter

# Filter
# https://www.w3schools.com/python/ref_func_filter.asp

numbers = [1, 2, 3, 4, 5]

# Solo los elementos que cumplen con la condicion del filter, van a ser parte de la nueva lista
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)

# Filter no modifica la lista original, simplemente crea una nueva lista.
print(numbers)

Filter con Diccionarios

# Filter con Diccionarios
# https://www.w3schools.com/python/ref_func_filter.asp

# Lista con diccionarios dentro
matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

print(matches)
print(len(matches))

# Genera una nueva lista de los partidos ganados
new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(new_list)
print(len(new_list))

print(matches)
print(len(matches))
for e in matches:
    if e["home_team_result"] == "Win":
        print(list(e))
    else:
        pass

En este ejemplo, ponemos una lista de productos que se compraron y vamos a saber cuales productos tienen un precio menor a 3000. El código es el siguiente:

products = [{
  "cantidad": 2,
  "precio": 1043,
  "producto": "Bolsa Blanca 55 X 55"
}, {
  "cantidad": 1,
  "precio": 2535,
  "producto": "Jabon en polvo"
}, {
  "cantidad": 2,
  "precio": 6608,
  "producto": "Papel Higiénico "
}, {
  "cantidad": 2,
  "precio": 7901,
  "producto": "Toallas de manos"
}]

economicos = list(filter(lambda x: x["precio"] <= 3000, products))
print(economicos)

se siente un poco rarito ejecutar primero el metodo y dentro de ello, la lista a recorrer, deferente a javascript por ejemplo, donde se aplica de una forma “mas directa” por decirlo sobre la lista a iterar.

Algo que me gusta mucho de las lambda, es la capacidad de guardar su lógica en una variable, y llamarla dentro del map/filter… que estemos usando

from typing import Callable

filter_even: Callable[[int], bool] = lambda x: x % 2 == 0
numbers = [1, 2, 3, 4, 5]
new_numbers = list(filter(filter_even, numbers))

Creo que mejora la legibilidad y nos da la posibilidad de reutilizar el código

conseguí el mismo resultado usando list comprehensions

lista = list(filter(lambda x: x % 2 == 0, numbers))

lista1 = [i for i in numbers if i % 2 == 0]

print(lista)
print(lista1)
lista = list(filter(lambda x: x['home_team_result'] == 'Draw', matches))

lista1 = [i for i in matches if i['home_team_result'] == 'Draw']

print(lista)
print(lista1)

Filter

Util para filtrar elementos de una lista. Filter no modifica el estado original del diccionario

Filter sobre listas

#-----------Filter--------------

# nueva lista con numeros pares
numbers = [1,2,3,4,5]
new_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(new_numbers)
--> [2, 4]

Filter sobre diccionarios

#------- Filter con diccionarios ----------

matches = [
  {
    'home_team': 'Bolivia',
    'away_team': 'Uruguay',
    'home_team_score': 3,
    'away_team_score': 1,
    'home_team_result': 'Win'
  },
  {
    'home_team': 'Brazil',
    'away_team': 'Mexico',
    'home_team_score': 1,
    'away_team_score': 1,
    'home_team_result': 'Draw'
  },
  {
    'home_team': 'Ecuador',
    'away_team': 'Venezuela',
    'home_team_score': 5,
    'away_team_score': 0,
    'home_team_result': 'Win'
  },
]

# obtener una lista con los diccionarios de los equipo locales que hayan ganado
print(matches)
print(len(matches))
--> 3
		[{'home_team': 'Bolivia', 'away_team': 'Uruguay', 'home_team_score': 3, 'away_team_score': 1, 'home_team_result': 'Win'}, 
		 {'home_team': 'Brazil', 'away_team': 'Mexico', 'home_team_score': 1, 'away_team_score': 1, 'home_team_result': 'Draw'}, 
		 {'home_team': 'Ecuador', 'away_team': 'Venezuela', 'home_team_score': 5, 'away_team_score': 0, 'home_team_result': 'Win'}]

new_list = list(filter(lambda item: item['home_team_result'] == 'Win', matches))

print(len(new_list))
print(new_list)
--> 2
		[{'home_team': 'Bolivia', 'away_team': 'Uruguay', 'home_team_score': 3, 'away_team_score': 1, 'home_team_result': 'Win'}, 
		 {'home_team': 'Ecuador', 'away_team': 'Venezuela', 'home_team_score': 5, 'away_team_score': 0, 'home_team_result': 'Win'}]

Genial forma de utilizar filter!