使用格式化字符串分隔数字组

时间:2018-04-27 17:15:14

标签: python string-formatting

给定class CustomRenderer extends XYLineAndShapeRenderer { @Override public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) { if (item % 160 == 0) { super.drawItem(g2, state, dataArea, info, plot, domainAxis, rangeAxis, dataset, series, item, crosshairState, pass); } else { //none } } } 这样的数字我想输出12345678910

我试过了:

number id 123.456.789-10

但结果是print('number id {0:1.3}.{0:1.3}.{0:1.3}-{0:1.3}'.format("12345678910")) 。如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

这是实现您的目标的一种方式:

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()函数中的位置参数。在您的情况下,您使用的是仅引用第一个参数的所有0。这就是为什么相同的子串被反复重复的原因。 (注意我是如何将其更改为{0}.{1}...{3}。)

我正在将*[number[i:i+3] for i in range(0,len(number), 3)]传递给格式函数,该函数只会将您的字符串分成3个块。

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

*运算符执行argument unpacking,它将列表元素传递给format()

<强>更新

作为@ user2357112 mentioned in the comments,在这种情况下,您实际上并不需要任何内部任何内容。只需使用{}来表示占位符。

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