python - 如何在我的类中实现 str 函数?

标签 python python-2.7

我创建了这个返回向量非零值的类。

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

最佳答案

您可以将 str.join 与生成器表达式结合使用,该表达式会迭代稀疏向量的长度并输出默认值为 0 的键值对:

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

关于python - 如何在我的类中实现 str 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840629/

相关文章:

python - 如何找到 Python 函数的参数数量?

python - 对元组列表的列表进行排序

python - 如何随机化 "noise"库的种子

python - 如何使用 python sdk 访问 Azure Application Insights 中记录的数据?

python - 需要一种方法来计算 GAE 数据存储中满足特定条件的实体? (超过 1000 个实体)

python - 如何在Python Tkinter中自动或无限次运行特定函数?

python - 从 Bottle 中获取服务器地址

python - 让扭曲服务器主动

python - numpy.memmap 到 Image.frombuffer - 不复制

python - 使用请求上传文件并发送额外数据