【问题标题】:return formatted string with list comprehension in python2.7在python2.7中返回带有列表理解的格式化字符串
【发布时间】: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


【解决方案1】:

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

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

结果:

[  12 -42]
[   3   4]

【讨论】:

  • 哈,那速度很快,现在我因为没有看到它而对自己摇头。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 2012-07-05
  • 2018-12-29
  • 2018-05-13
  • 2019-08-05
  • 2018-06-23
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多