【问题标题】:Python string formatting: padding negative numbersPython字符串格式化:填充负数
【发布时间】:2017-06-26 04:00:33
【问题描述】:

我想将我的整数格式化为字符串,这样在没有符号的情况下,它们将被零填充以具有至少两位数。

比如我想要

1
-1
10
-10

成为

01
-01
10
-10

具体来说,我希望负数 (3) 和非负数 (2) 的最小字符串长度不同。详细的here 中的简单数字填充是不够的。这可能吗?

【问题讨论】:

  • @PeterWood 我一遍又一遍地阅读该网页,其中没有任何内容可以解决我的问题,即我需要分别为正数和负数提供不同的最小长度字符串。
  • 把你尝试过的问题放在问题中,并解释为什么它不充分。
  • @PeterWood 谢谢。明白了。这是我问的第一个问题,对于不完整的问题深表歉意。如果 cmets 也能工作,将不胜感激。

标签: python number-formatting


【解决方案1】:

您可以使用 str.format,但在大小上加 1 以在此处考虑负数:

l = [1,-1,10,-10,4]

new_l = ["{1:0{0}d}".format(2 if x>=0 else 3,x) for x in l]

print(new_l)

结果:

['01', '-01', '10', '-10', '04']

之所以有效,是因为format 接受嵌套表达式:您也可以将大小({:02d}{:03d})作为格式项传递,从而省去了在第一遍中格式化格式字符串的麻烦。

【讨论】:

    【解决方案2】:

    根据here,类型描述符前需要一个空格,所以都是

    '% d'%(1)
    

    '{: d}'.format(1)
    

    导致(注意空格)

    ' 1'
    

    与上面用 -1 调用的结果很好地对齐:

    '-1'
    

    【讨论】:

      【解决方案3】:

      我能想到的最简洁的方式(尽管可能有点难以理解)(至少在 Python 3 中)是带有嵌套花括号的 formatted string literal,类似于公认的答案。有了这个,接受答案的例子可以写成

      l = [1, -1, 10, -10, 4]
      new_l = [f"{x:0{2 + (x < 0)}d}" for x in l]
      print(new_l)
      

      结果相同:

      ['01', '-01', '10', '-10', '04']
      

      【讨论】:

        【解决方案4】:

        使用"{:03d}".format(n)。 0 表示前导零,3 是字段宽度。可能不是完全你想要的:

        >>> for n in (-123,-12,-1,0,1,12,123, 1234):
        ...   print( '{:03d}'.format(n) )
        ... 
        -123
        -12
        -01
        000
        001
        012
        123
        1234
        

        【讨论】:

          【解决方案5】:

          zfill 实际上在左边用零填充并考虑负数。

          所以n.zfill(3 if n &lt; 0 else 2) 可以解决问题。

          【讨论】:

          • zfillstr 类的方法,n 在您的示例中是一个整数。这行不通
          猜你喜欢
          • 1970-01-01
          • 2019-08-27
          • 1970-01-01
          • 2022-11-18
          • 1970-01-01
          • 1970-01-01
          • 2014-08-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多