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.

  1. La classe MatriuDispersaIter ha de definir el mètode __iter__ que retorna un iterador com l’esmentat a l’especificació. Observeu que l’atribut vals és un diccionari i que els diccionaris tenen el mètode dict.items() que retorna un iterador com el demanat.

  2. 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.