首页 > 解决方案 > 使用格式化字符串分隔数字组

问题描述

给定一个12345678910我想输出的数字number id 123.456.789-10

我试过这个:

print('number id {0:1.3}.{0:1.3}.{0:1.3}-{0:1.3}'.format("12345678910"))

但结果是number id 123.123.123-123。如何正确执行此操作?

标签: pythonstring-formatting

解决方案


这是实现您想要做的事情的一种方法:

number = "12345678910"
print(
    'number id {0}.{1}.{2}-{3}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)
#number id 123.456.789-10.

您的代码存在一些问题。首先,第一个数字是"{0...}"format()函数中的位置参数。在您的情况下,您使用的 all0仅指第一个参数。这就是为什么一遍又一遍地重复相同的子字符串的原因。(请注意我如何将其更改为{0}.{1}...{3}.)

我正在传递*[number[i:i+3] for i in range(0,len(number), 3)]给 format 函数,它只是将你的字符串分成 3 个块。

print([number[i:i+3] for i in range(0,len(number), 3)])
#['123', '456', '789', '10']

*运算符进行参数解包,将列表中的元素依次传递给format().


更新

正如@user2357112在评论中提到的那样,在这种情况下,您实际上不需要大括号内的任何东西。只是{}用来代表占位符。

print(
    'number id {}.{}.{}-{}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)

推荐阅读