【发布时间】:2016-10-26 00:52:21
【问题描述】:
请注意,这是我自己学习 OOP 的学习练习。 请不要告诉我使用 numpy,因为这个练习的重点是学习创建类和定义方法(但是,如果 numpy 或任何其他库包含的方法完全符合我的要求)我要求然后随时指向我,以便我可以看到代码的样子)。
我正在使用 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]
几乎就在那里,但我不知道是否有办法让方括号放在前面而不让它们在数字之间重复。
是否有人可以帮助我,或者通过确认这是不可能的,让我摆脱痛苦?
【问题讨论】:
-
“通过确认这是不可能的,让我摆脱痛苦?” - 遗憾的是,这绝对是可能的!但请注意,您首先必须弄清楚每件事需要多少空间,并不总是四个字符。
-
谢谢。那么用变量替换格式中的 4 的好方法是什么?如果需要的最大空间是
max_size,我的想法是尝试("{:%s}"%max_size).format(num),但这看起来太奇怪了吗?
标签: python arrays matrix list-comprehension nested-loops