__我自己的矩阵里的str_uuu,python

2024-09-26 22:12:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作自己的矩阵模块(我知道numpy存在),但我不太确定如何构建我的__str__。我的矩阵是这样的

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

这里我用int2填充我的矩阵。如果我们只说rows = 5和{},那么当我打印它的时候就会得到这个

^{pr2}$

但我想

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)])

那也很好


Tags: 模块inselfnumpyforinitdefrange
1条回答
网友
1楼 · 发布于 2024-09-26 22:12:33

您可以使用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)

输出

^{pr2}$

如果您决定确实需要行项目之间的分隔符,只需修改内部.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__方法的一个更为典型的版本是:

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)

相关问题 更多 >

    热门问题