Подтвердить что ты не робот

Как правильно выровнять числовые данные?

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

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]))
4b9b3361

Ответ 1

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

width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))

Ответ 2

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

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

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

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

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

Ответ 3

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

>>> '%10s' % 10
'        10'
>>> '%10s' % 100000
'    100000'

Ответ 4

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

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

Или просто:

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

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

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

Ответ 5

Если вы знаете верхнюю границу ваших номеров, вы можете отформатировать ее с помощью "%<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