return 带列表理解的格式化字符串 python2.7

return formatted string with list comprehension in python2.7

请注意,这是我自己学习 OOP 的学习练习。 请不要告诉我使用 numpy 因为这个练习的重点是学习创建 类 和定义方法(但是,如果 numpy 或任何其他库包含完全符合我要求的方法,然后随时指出我的方法,这样我就可以看到代码是什么样子的)。

我正在使用 Python2.7,我想 return 一个字符串,它给我一个两端带有方括号的间隔矩阵,如下所示:

[  12 -42 ]
[   3   4 ]

我想 return 它作为一个字符串(而不是将它打印到位),因为我正在重载 str 方法。我见过类似的问题,这些问题帮助我走到了现在的地步。但是我仍然不确定我想做的事情是否完全有可能按照我想做的方式去做。

这是我第一次尝试使用嵌套 for 循环:

def __str__(self):
    """ Return each entry in the Matrix spaced apart."""
    string_out = ""
    for row in self.matrix:
        string_out += "["
        for num in row:
            string_out += "%4d"%num
        string_out += "]\n"
    return string_out

其中 self.matrix 是我的数组,它存储我正在使用的 Matrix 对象的值。在我的示例中 self.matrix = [[12,-42],[3,4]]).

for 循环给了我想要的,但是我想看看我是否可以用列表理解的方式做到这一点。

这是我迄今为止对列表理解的尝试:

def __str__(self):
    return "]\n".join("".join( "{:4}".format(num) for num in row) for row in self.matrix) +"]"

这给了我:

  12 -42]
   3   4]

差不多了,但我不知道是否有办法让方括号在前面而不让它们也在数字之间重复。

是否有人能够通过确认这是不可能的来帮助我,或者让我摆脱痛苦?

在我看来你很接近。您只需要更改您正在 join 的内容,并在开头添加一个额外的左括号。怎么样:

return "[" + "]\n[".join("".join( "{:4}".format(num) for num in row) for row in self.matrix) +"]"

这导致:

[  12 -42]
[   3   4]