关于Python中str.ljust字符串填充的行为

0 投票
2 回答
1237 浏览
提问于 2025-04-18 17:44

我有一个情况,我正在为

matplotlib.colorbar

设置标签,我想用下面的代码均匀分配描述

temp = ""
for section in range(total_section_len):
    temp.ljust(60//(total_section_len * 5))
    temp += "stream 0"
    temp.ljust(60//(total_section_len * 5))
    temp += "stream 1"
    temp.ljust(60//(total_section_len * 5))
print temp

我期待的效果是

"    stream0     stream1     "

但实际上我得到的是

"stream0stream1"

为什么会出现这样的

str.ljust 

行为呢?

谢谢

2 个回答

0

ljust(width, fillchr) 是一个方法,它会把字符串靠左对齐,宽度由你指定,并用 fillchr 填充,默认填充的是空格。

所以

a = ''
b = a.ljust(10)
print(a)
>>> ''
print(b)
>>> '         '

这个方法会把一个左对齐的字符串返回给变量 b,而变量 a 不会被修改。

因此,这段代码应该可以正常工作:

a = ''
a += ''.ljust(10) + 'stream0'
a += ''.ljust(10) + 'stream1'
print(a)
>>> '          stream0          stream1'
0

ljust这个函数的参数是字符串的“最小”长度。只有当这个值比当前字符串的长度还要长时,它才会在字符串后面加空格。

除非total_section_len的值只有1,否则60//(total_section_len * 5)的结果会小于你的字符串长度,所以不会进行填充。

另外,字符串是不可变的,这意味着它不会直接修改原来的字符串。你需要使用返回的结果,比如说temp = temp.ljust(...)

撰写回答