Filtra

Dissenya la versió recursiva de l’esquema de recorregut filtra.

Desa al mòdul iesquemes la funció recursiva següent:

iesquemes.ifiltra(cond, it)

Filtra els elements de it que compleixen la condició cond.

Paràmetres:
  • funcio – funció amb un paràmetre.

  • seq – iterador.

Tipus de retorn:

iterador

Retorna:

(e for e in seq if cond(e))

Per exemple:


>>> s = [2, -1, -5, 7, -25]
>>> list(ifiltra(lambda x: x<0, iter(s)))
[-1, -5, -25]
>>> list(ifiltra(lambda x: x**2>10, iter(s)))
[-5, 7, -25]
>>> list(ifiltra(lambda x: x>0, iter(s)))
[2, 7]

Disposes de més jocs de proves al fitxer test-ifiltra.txt i d’una solució al fitxer iesquemes.py.

Solució recursiva lineal


def ifiltra(condicio, it):
    e = next(it, None)
    if e:
        r = ifiltra(condicio, it)
        if condicio(e):
            yield e
        yield from r