【问题标题】:What's the shortest syntax to format a 2d array of floats into 2 decimals?将二维浮点数组格式化为 2 位小数的最短语法是什么?
【发布时间】:2018-08-04 18:06:49
【问题描述】:

我试过了

print("%.2f" % myArray)

得到了

TypeError: must be real number, not list

然后我尝试了

print(map(lambda a: map(lambda x: "%.3f" % x, a), myArray))

得到了

SyntaxError: invalid syntax

【问题讨论】:

  • 如果错误消息说它不需要列表,那么您可能在这里处理的是列表而不是数组。通过edit发送帖子(并包括最少的示例输入)来澄清这一点可能很有用。
  • 您可以在这里获得更多见解:stackoverflow.com/questions/21008858/…

标签: python python-3.x list string-formatting


【解决方案1】:

只需在列表推导中使用列表推导:

>>> my_list = [[1.0001, 1.0002], [1.003, 1.004]]
>>> [['{:.2f}'.format(item) for item in sublist] for sublist in my_list]
[['1.00', '1.00'], ['1.00', '1.00']]

我在这里也使用了str.format 而不是% 格式。如果您使用的是 Python 3.6+,您还可以使用 f-strings 进行格式化:

>>> [[f'{item:.2f}' for item in sublist] for sublist in my_list]
[['1.00', '1.00'], ['1.00', '1.00']]

即使变量名很长,它也比 map 解决方案短:

>>> list(map(lambda x: list(map(lambda y: "%.2f" % y, x)), my_list))
[['1.00', '1.00'], ['1.00', '1.00']]

【讨论】:

    【解决方案2】:

    您的代码有效,只需记住list 您的maps 即可在打印中查看

    >>> arr = [[1,2,3.22225], [1.31,434.144222]]
    >>> print(list(map(lambda a: list(map(lambda x: "%.3f" % x, a)), arr)))
    
    [['1.000', '2.000', '3.222'], ['1.310', '434.144']]
    

    【讨论】:

      【解决方案3】:

      您的map 语句对于列表是正确的。由于您有一个二维数组,请将数组的每个元素(一维列表)传递给您的 map

      >>> arr
      [[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]]
      >>> print('\n'.join(" ".join(map("{:.2f}".format, lst)) for lst in arr))
      0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90
      0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2011-09-15
        • 2016-09-09
        • 2011-07-08
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多