Как правильно выровнять числовые данные? - PullRequest
35 голосов
/ 10 сентября 2009

У меня есть некоторые данные, которые я отображаю в формате 3 столбцов, в форме:

key: value key: <tab> key: value <tab> key: value.

Вот пример:

p: 1    sl: 10  afy: 4
q: 12   lg: 10  kla: 3
r: 0    kl: 10  klw: 3
s: 67   vw: 9   jes: 3
t: 16   uw: 9   skw: 3
u: 47   ug: 9   mjl: 3
v: 37   mj: 8   lza: 3
w: 119  fv: 8   fxg: 3
x: 16   fl: 8   aew: 3

Однако я бы хотел, чтобы числа были выровнены по правому краю, например:

a:   1
b:  12
c: 123

Как я могу сделать это в Python?

Вот существующий код печати, который у меня есть:

print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" +
    str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" +
    str(tripleArray[i][0]) + ": " + str(tripleArray[i][1]))

Ответы [ 5 ]

76 голосов
/ 10 сентября 2009

В Python 2.6+ (и это стандартный метод в 3), «предпочтительным» методом форматирования строки является использование string.format () (полные документы, для которых можно найти здесь ) , правильное обоснование может быть сделано с

"a string {0:>5}".format(foo)

это будет использовать 5 мест, однако

"a string {0:>{1}}".format(foo, width)

также допустимо и будет использовать значение ширины, переданное в .format ().

34 голосов
/ 10 сентября 2009

В Python 2.5 используйте rjust (для строк). Кроме того, попробуйте привыкнуть к форматированию строки в python вместо простого объединения строк Простой пример форматирования строк и строк ниже:

width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))
25 голосов
/ 10 сентября 2009

Использовать форматирование строки Python: '%widths' где ширина - целое число

>>> '%10s' % 10
'        10'
>>> '%10s' % 100000
'    100000'
3 голосов
/ 13 февраля 2017

В Python 3.6 вы можете использовать Литеральная строка Интерполяция , что меньше подробный и, вероятно, более интуитивно понятный:

width = 5
number = 123
print (f'{number:>{width}}')

Или просто:

number = 123
print (f'{number:>5}')

Он использует большую часть синтаксиса str.format().

Я думаю / надеюсь, что это будет предпочтительным способом в будущем.

2 голосов
/ 10 сентября 2009

Если вы знаете верхнюю границу для своих чисел, вы можете отформатировать с помощью "%<lenght>d" % n. Учитывая, что все эти вычисления сделаны и в списке (char, num):

mapping = ((chr(i+ord('a')), singleArray[i]), 
           (doubleArray[i][0],doubleArray[i][1]), 
           (tripleArray[i][0],tripleArray[i][1])
           )
for row in mapping:
   print "%s: %3d" % row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...