Matrius disperses iterables¶
L’objectiu és poder iterar sobre les posicions corresponents a valors
diferents de zero de la matriu dispersa, vegeu el mòdul
matrius
.
Especificació de la classe MatriuDispersaIter
¶
La classe MatriuDispersaIter
es deriva per
herència de la classe MatriuDispersa
i és
iterable. L’iterador genera totes les parelles (posició, valor) tals
que valor és diferent de zero. Per exemple:
>>> from matrius import MatriuDispersaIter
>>> m = MatriuDispersaIter(2, 3)
>>> set(m) == set()
True
>>> m[1, 2] = -5
>>> m[1, 1] = 9
>>> m[2, 3] = -1
>>> set(m) == set([((1, 1), 9), ((1, 2), -5), ((2, 3), -1)])
True
Implementació de la classe MatriuDispersaIter
¶
Implementeu la classe MatriuDispersaIter
al
fitxer matrius.py
.
La classe
MatriuDispersaIter
ha de definir el mètode __iter__ que retorna un iterador com l’esmentat a l’especificació. Observeu que l’atributvals
és un diccionari i que els diccionaris tenen el mètodedict.items()
que retorna un iterador com el demanat.Redefiniu el mètode __rmul__. La nova implementació ha d’aprofitar que els objectes de classe
MatriuDispersaIter
són iterables.
Disposeu de jocs de proves al fitxer matrius_iter.txt
.
Nota
Si encara no heu resolt l’exercici
Matrius disperses, podeu descarregar el
fitxer matrius.py
.
La funció compta_negatius()
¶
- matrius.compta_negatius(mat)¶
Retorna el nombre d’elements negatius que té la matriu dispersa iterable mat.
Per exemple:
>>> from matrius import compta_negatius
>>> compta_negatius(m)
2
Implementeu la funció compta_negatius()
al
fitxer matrius.py
.
Disposeu de jocs de proves al fitxer matrius_iter.txt
.
Avís
Implementeu la funció sense usar les sentències for ni while.
Solució
Disposeu d’una solució al fitxer matrius.py
.