在python2.7中返回带有列表推导的格式化字符串

时间:2016-06-23 15:24:35

标签: python arrays matrix list-comprehension nested-loops

请注意,这是我自己学习OOP的学习练习。 请不要告诉我使用numpy ,因为本练习的目的是学习创建类和定义方法(但是,如果numpy或任何其他库包含的方法完全符合我&# 39; m要求然后随意指向我,这样我就可以看到代码的样子了。)

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

[  12 -42 ]
[   3   4 ]

我希望将其作为字符串返回(而不是将其打印到位),因为我重载了 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]

几乎就在那里,但是我无法弄清楚是否有一种方法可以让方括号在前面而不会让它们在数字之间重复。

有人能够帮助我,或者通过确认它不可能让我摆脱困境吗?

1 个答案:

答案 0 :(得分:1)

我觉得你很亲密。您只需要改变join的内容,并在开头添加一个额外的左括号。怎么样:

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

结果是:

[  12 -42]
[   3   4]