__str__来自我自己的矩阵,python

时间:2017-10-20 07:17:58

标签: python string class matrix

我制作了自己的矩阵模块(我知道存在numpy),而且我不太确定如何构建我的__str__。我的矩阵看起来像这样

for _ in range(rows):
        self.matrixRC.append([2 for _ in range(colls)])

这里我用int填充我的矩阵2.如果我们只说rows = 5calls = 3,那么当我打印它时我会得到这个

[[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2]]

但我想得到

222
222
222
222
222

有没有人知道一个简单的Python'这样做的方法

这实际上是__init__

中唯一的部分
def __init__(self, rows = 10, colls = 10):
    self.matrixRC = []
    for _ in range(rows):
        self.matrixRC.append([2 for _ in range(colls)])

对于rows colls事物......这只是奇怪的想法,我仍然无法思考这个任意矩阵。但现在rows and colls应该正确完成。如果更容易让__init__像这样

def __init__(self, rows = 10, colls = 10):
    self.matrixRC = []
    for _ in range(colls):
        self.matrixRC.append([2 for _ in range(rows)])

还不错,

1 个答案:

答案 0 :(得分:2)

您可以使用str.join方法执行此操作。内部循环将行项转换为字符串,并将空字符串作为分隔符连接起来,外部循环使用换行符连接行字符串。

class Test:
    def fill(self, rows, cols, val):
        self.matrixRC = [[val] * cols for _ in range(rows)]

    def __str__(self):
        return '\n'.join(''.join(map(str, row)) for row in self.matrixRC)

t = Test()
t.fill(5, 3, 2)
print(t)

<强>输出

222
222
222
222
222

如果你决定需要行项之间的分隔符,只需修改内部.join的字符串,例如

'\n'.join(' | '.join(map(str, row)) for row in self.matrixRC)   

给我们

2 | 2 | 2
2 | 2 | 2
2 | 2 | 2
2 | 2 | 2
2 | 2 | 2

有些人,包括Guido,不喜欢map功能。将.join方法传递给列表而不是生成器实际上更有效。因此__str__方法的更Pythonic版本是:

def __str__(self):
    return '\n'.join([''.join([str(u) for u in row]) for row in self.matrixRC])

我们还可以通过分离两个循环使代码更具可读性:

def __str__(self):
    out = []
    for row in self.matrixRC:
        out.append(''.join([str(u) for u in row]))
    return '\n'.join(out)