Как я могу реализовать функцию str в моем классе?

1

Я создал этот класс, который возвращает ненулевые значения вектора.

class SparVec:

    def __init__(self,length):
        self.val={}
        self.len=length

    def __len__(self):
        return self.len

    def __getitem__(self, index):
        return self.val.get(index,0)
    def __setitem__(self,index,value):
        if value !=0:
             self.val[index]=value
        self.len=max(index,self.len)
    # Adding vectors
    def __add__(self, other):
        # Add Two vectors
        length=self.len
        result=SparVec(length)
        for index in self.val:
            result[index]=self[index]+other[index]
        for index in other.val:
            if index not in self.val:
                result[index]=other[index]
        return result

    def nonzeros(self):
        return 'Sparse Vector {}'.format(self.val)

if __name__ == '__main__':

    a = SparVec(4)
    a[2] = 9.2
    a[0] = -1
    a[3] = 0
    print a
    print a.nonzeros()

    b = SparVec(5)
    b[1] = 1
    print b
    print b.nonzeros()

    c = a+b
    print c
    print c.nonzeros()

Все идет нормально. Я получаю значения, которые я хочу, с помощью функции ненулевого. Проблема заключается в том, как получить следующий вывод при печати a или b. Совет. Без создания нового списка, который сохраняет все элементы как нули, а затем распечатывает их.

print a
[0]=-1 [1]=0 [2]=9.2 [3]=0
Теги:
python-2.7

1 ответ

0

Вы можете использовать str.join с выражением генератора, который выполняет итерацию по длине разреженного вектора и выводит пары ключ-значение со значением по умолчанию 0:

def __str__(self):
    return ' '.join('[{}]={}'.format(i, self.val.get(i, 0)) for i in range(self.len))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню