Как правильно выровнять числовые данные?
у меня есть некоторые данные, которые я отображаю в формате 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 ответов
в Python 2.5 используйте rjust (на строках). Кроме того, попробуйте привыкнуть к строка форматирования в python вместо того, чтобы просто объединять строки. Простой пример для rjust и форматирования строк ниже:
width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))
в python 2.6+ (и это стандартный метод в 3), "предпочтительным" методом форматирования строк является использование string.format () (полные документы, для которых можно найти здесь). правильное обоснование может быть сделано с помощью
"a string {0:>5}".format(foo)
это будет использовать 5 мест, однако
"a string {0:>{1}}".format(foo, width)
также допустимо и будет использовать ширину значения, как передано .формат.)(
использовать форматирование строк python:'%widths'
где width-целое число
>>> '%10s' % 10
' 10'
>>> '%10s' % 100000
' 100000'
в Python 3.6 вы можете использовать Строковый Литерал Интерполяция, что меньше многословный и, вероятно, более интуитивно понятный в использовании:
width = 5
number = 123
print (f'{number:>{width}}')
или так:
number = 123
print (f'{number:>5}')
он использует большую часть str.format()
синтаксис.
Я думаю/надеюсь, что это будет предпочтительным образом в будущем.
Если вы знаете верхнюю границу aa для своих чисел, вы можете форматировать с помощью "%<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