Filtra¶
Dissenya la versió recursiva de l’esquema de recorregut filtra.
Desa al mòdul esquemes la funció recursiva següent:
- esquemes.filtra(cond, seq)¶
Filtra els elements de seq que compleixen la condició cond.
- Paràmetres:
funcio – funció amb un paràmetre.
seq – seqüència.
- Tipus de retorn:
- Retorna:
[e for e in seq if cond(e)]
Per exemple:
>>> s = [2, -1, -5, 7, -25] >>> filtra(lambda x: x<0, s) [-1, -5, -25] >>> filtra(lambda x: x**2>10, s) [-5, 7, -25] >>> filtra(lambda x: x>0, s) [2, 7]
Disposes de més jocs de proves al fitxer
test-filtra.txt i d’una solució al fitxer
esquemes.py.
Solucions¶
Recursiva lineal¶
def filtra_1(condicio, seq):
if len(seq) == 0:
r = []
else:
r = filtra_1(condicio, seq[1:])
if condicio(seq[0]):
r.insert(0, seq[0])
return r
Recursiva lineal amb immersió d’eficiència¶
def filtra_2(condicio, seq):
return filtra_2_i(condicio, seq, range(len(seq)))
def filtra_2_i(condicio, seq, llesca):
if len(llesca) == 0:
r = []
else:
r = filtra_2_i(condicio, seq, llesca[1:])
if condicio(seq[llesca[0]]):
r.insert(0, seq[llesca[0]])
return r