Форматирование чисел с одинаковой шириной с использованием f-строк Python - PullRequest
5 голосов
/ 04 мая 2019

Я хочу отформатировать массив чисел одинаковой ширины, используя f-строки. Числа могут быть как положительными, так и отрицательными.

Минимальный рабочий пример

import numpy as np  
arr = np.random.rand(10) - 0.5 
for num in arr:
    print(f"{num:0.4f}")

Результат

0.0647
-0.2608
-0.2724
0.2642
0.0429
0.1461
-0.3285
-0.3914

Из-за отрицательного знака цифры не распечатываются с одинаковой шириной, что раздражает. Как я могу получить ту же ширину, используя f-строки?

Один из способов, который я могу придумать, - преобразовать число в строку и вывести строку. Но есть ли лучший способ, чем это?

for num in a: 
    str_ = f"{num:0.4f}" 
    print(f"{str_:>10}")

Ответы [ 2 ]

5 голосов
/ 04 мая 2019

Используйте пробел перед строкой форматирования:

>>> f"{5: 0.4f}"
' 5.0000'
>>> f"{-5: 0.4f}"
'-5.0000'

Или знак плюс (+) для принудительного отображения всех отображаемых знаков:

>>> f"{5:+0.4f}"
'+5.0000'
2 голосов
/ 04 мая 2019

Вы можете использовать знак форматирование опция:

>>> import numpy as np
>>> arr = np.random.rand(10) - 0.5
>>> for num in arr:
...     print(f'{num: .4f}')  # note the leading space in the format specifier
...
 0.1715
 0.2838
-0.4955
 0.4053
-0.3658
-0.2097
 0.4535
-0.3285
-0.2264
-0.0057

Цитировать документацию:

Параметр sign действителен только для числовых типов и может быть одним из следующее:

Option    Meaning
'+'       indicates that a sign should be used for both positive as well as
          negative numbers.
'-'       indicates that a sign should be used only for negative numbers (this
          is the default behavior).
space     indicates that a leading space should be used on positive numbers,
          and a minus sign on negative numbers.
...