我制作了自己的矩阵模块(我知道存在numpy),而且我不太确定如何构建我的__str__
。我的矩阵看起来像这样
for _ in range(rows):
self.matrixRC.append([2 for _ in range(colls)])
这里我用int
填充我的矩阵2.如果我们只说rows = 5
和calls = 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)])
还不错,
答案 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)