【问题标题】:how to loop from 0000 to 9999 and convert the number to the relative string?如何从 0000 循环到 9999 并将数字转换为相对字符串?
【发布时间】:2012-03-02 04:29:58
【问题描述】:

我想得到一些字符串,范围从0000到9999,也就是说,我想打印以下字符串:

0000
0001
0002
0003
0004
0005
0006
....
9999

我尝试使用print "\n".join([str(num) for num in range(0, 9999)]),但失败了,我得到以下号码:

0
1
2
3
4
5
6
...
9999

我希望python自动添加前缀0,使数字保持4位数字时间。谁能帮帮我?任何帮助表示赞赏。

【问题讨论】:

  • 你不能用 range(0, 9999) 得到一个以 "9999" 结尾的序列; Python 范围不包括上限。如果要包含 9999,请使用 range(10**4)。

标签: python string numbers


【解决方案1】:

获得所需内容的一种方法是使用字符串格式:

>>> for i in range(10):
...     '{0:04}'.format(i)
... 
'0000'
'0001'
'0002'
'0003'
'0004'
'0005'
'0006'
'0007'
'0008'
'0009'

所以要做你想做的,这样做:

print("\n".join(['{0:04}'.format(num) for num in range(0, 10000)]))

【讨论】:

  • 不,这不是一个完美的解决方案。那里的主要缺陷。如果您要使用像 9999 这样的大范围,那么您应该使用 xrange 来避免分配整个数字列表。执行一次或两次可能没有太大区别,但是如果该循环在某些递归函数调用中的另一个循环内怎么办?
  • Michael 所说的加上删除 [](使用 gen exp 而不是 list comp)。
  • @MichaelDillon,这仅在 Python 2 中是正确的。在 Python 3 中,range == xrangexrange 未定义。 OP 使用了range,所以我假设他使用的是 Python 3。
  • @yak,这也取决于具体情况。使用genex 可以节省内存,但在这种情况下实际上会慢一些。反正在我的机器上。
  • @senderle:不过,他使用的 print 语句和你复制的语句对于 Python 2 来说是一个致命的赠品。
【解决方案2】:

http://docs.python.org/library/stdtypes.html#str.zfill

返回一个长度为 0 的数字字符串 宽度。正确处理符号前缀。原始字符串是 如果宽度小于或等于 len(s),则返回。

例如:

>>> for i in range(10):
...   print('{:d}'.format(i).zfill(4))
... 
0000
0001
0002
0003
0004
0005
0006
0007
0008
0009

【讨论】:

    【解决方案3】:

    试试这个

    print"\n".join(["%#04d" % num for num in range(0, 9999)])
    

    【讨论】:

      【解决方案4】:

      只需使用str.rjust

      print "\n".join([str(num).rjust(4, '0') for num in range(0, 1000)])
      

      返回右对齐的长宽字符串。填充 使用指定的 fillchar 完成(默认为 ASCII 空格)。这 如果宽度小于或等于 len(s),则返回原始字符串。

      【讨论】:

        【解决方案5】:

        str.zfill 也可以:

        print('\n'.join([str(num).zfill(4) for num in range(0, 10000)]))

        【讨论】:

          【解决方案6】:

          另一种方法:

          ["%.4d" % i for i in range(0,999)]
          

          ["%04d" % i for i in range(0,999)]
          

          【讨论】:

            【解决方案7】:

            这应该可以解决左填充字符串的问题:

            (lambda f: f(f))(lambda f: (lambda x: (x if len(x) == 4 else f(f)('0' + x))))(str(num))
            

            【讨论】:

              【解决方案8】:

              你可以试试这个:

              for i in range(9999):
                  print(str(i).zfill(4)+"\n")
              

              【讨论】:

                猜你喜欢
                • 2021-10-06
                • 2014-07-17
                • 2020-05-04
                • 2015-02-06
                • 1970-01-01
                • 2023-03-06
                • 1970-01-01
                • 2019-12-17
                • 2020-10-31
                相关资源
                最近更新 更多