python f 字符串整数,带有千位逗号和 space 填充
python f-string integer with thousands comma and space padded
因此,例如两个数字 123456789
、12345678
,我想要逗号千位 和 对齐最右边的数字。
123,456,789
12,345,678
我有
f'{val:,}'
将逗号放在适当的位置,但这会将行与第一列中的 1 对齐。
我已经 f'{val:,____}
尝试了 _____
中的各种组合、值和方向,但是 -- 不行。我什至尝试嵌套 f 弦(不起作用,仅供参考)
我该怎么做?
f'{val:,}'.rjust(n)
怎么样?这将在前面加上空格,以便字符串的长度为 n
。您只需要设置适当的 n
值。对于 123456789
、12345678
,您可以设置 n=12
(+ 2 因为有逗号)。这对你有帮助吗?
a = 123456789
b = 12345678
print(f"{a:12,d}\n{b:12,d}")
数字是 field.By 的宽度,默认它们是右对齐的。
首先,您需要知道数字字符串的最大长度。然后你可以 right-align 他们:
numbers = [123456789, 12345678]
num_strs = [f'{num:,d}' for num in numbers]
max_len = max(len(s) for s in num_strs)
right_aligned = [f'{s:>{max_len}}' for s in num_strs]
print('\n'.join(right_aligned))
哪个应该给你:
123,456,789
12,345,678
如果您已经知道所需的字符串宽度,您还可以这样做:
width = 11
f'{12345678:>{width},d}'
# generate random numbers with significantly different magnitudes
numbers = [random.randint(-1, 1) * math.ceil(random.random() * 10 ** random.randint(0, 10)) for _ in range(10)]
numbers # [0, -91526305, 0, 91, 7170, -448250288, 0, -36, 9521, 7830]
以下将快速计算位数,处理负数和零:
numnums = math.ceil(max(
[math.log10(abs(n)) + (n < 0) if n != 0 else 1 for n in numbers]
))
fmt = f'{{:>{numnums + (numnums - 1) // 3},}}'
输出宽度不变:
In [34]: list(map(fmt.format, numbers))
Out[34]:
[' 0',
' -91,526,305',
' 0',
' 91',
' 7,170',
' -448,250,288',
' 0',
' -36',
' 9,521',
' 7,830']
因此,例如两个数字 123456789
、12345678
,我想要逗号千位 和 对齐最右边的数字。
123,456,789
12,345,678
我有
f'{val:,}'
将逗号放在适当的位置,但这会将行与第一列中的 1 对齐。
我已经 f'{val:,____}
尝试了 _____
中的各种组合、值和方向,但是 -- 不行。我什至尝试嵌套 f 弦(不起作用,仅供参考)
我该怎么做?
f'{val:,}'.rjust(n)
怎么样?这将在前面加上空格,以便字符串的长度为 n
。您只需要设置适当的 n
值。对于 123456789
、12345678
,您可以设置 n=12
(+ 2 因为有逗号)。这对你有帮助吗?
a = 123456789
b = 12345678
print(f"{a:12,d}\n{b:12,d}")
数字是 field.By 的宽度,默认它们是右对齐的。
首先,您需要知道数字字符串的最大长度。然后你可以 right-align 他们:
numbers = [123456789, 12345678]
num_strs = [f'{num:,d}' for num in numbers]
max_len = max(len(s) for s in num_strs)
right_aligned = [f'{s:>{max_len}}' for s in num_strs]
print('\n'.join(right_aligned))
哪个应该给你:
123,456,789
12,345,678
如果您已经知道所需的字符串宽度,您还可以这样做:
width = 11
f'{12345678:>{width},d}'
# generate random numbers with significantly different magnitudes
numbers = [random.randint(-1, 1) * math.ceil(random.random() * 10 ** random.randint(0, 10)) for _ in range(10)]
numbers # [0, -91526305, 0, 91, 7170, -448250288, 0, -36, 9521, 7830]
以下将快速计算位数,处理负数和零:
numnums = math.ceil(max(
[math.log10(abs(n)) + (n < 0) if n != 0 else 1 for n in numbers]
))
fmt = f'{{:>{numnums + (numnums - 1) // 3},}}'
输出宽度不变:
In [34]: list(map(fmt.format, numbers))
Out[34]:
[' 0',
' -91,526,305',
' 0',
' 91',
' 7,170',
' -448,250,288',
' 0',
' -36',
' 9,521',
' 7,830']