2009-09-09 4 views
33

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

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

ответ

33

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

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

Если вы знаете, ау верхнюю границу для чисел, вы можете форматировать с "%<lenght>d" % n. Учитывая все эти расчеты делаются и в списке (полукокс, 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 
25

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

>>> '%10s' % 10 
'  10' 
>>> '%10s' % 100000 
' 100000' 
+17

Для левого выравнивания используйте '% -10s' (просто добавьте это, потому что это лучший результат Google для выравнивания слева) – Mark

72

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

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

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

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

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

+1

Я не знаю, почему этот ответ проголосовали, поскольку он неверен - для выравнивания по правому краю, необходимо использовать '' {:> 5} ", где'> 'указывает выравнивание по правому краю (по умолчанию для строк указано' <'или выравнивание по левому краю). К счастью, связанная с документацией информация становится понятной. (EDIT: неважно, я просто исправлю ответ и оставлю это для справки.) – Pat

+6

Это было подтверждено, потому что «>» является значением по умолчанию для поля «align» для чисел, и вопрос был о числах. Вы правы, однако, что сделать его явным лучше. –

+1

Mea culpa.Я нашел этот вопрос, потому что я пытался выравнивать строки, и я не читал вопрос OP достаточно близко, чтобы поймать, что печатаются только цифры. Спасибо за разъяснения. – Pat

3

В Python 3.6 вы можете использовать Literal String Interpolation, который менее многословным и, вероятно, более удобный в использовании:

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

Или просто:

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

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

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

+0

GitHub: [Использование строковой интерполяции строк с использованием строки f без Python 3.6] (https://github.com/damnever/fmt) –

Смежные вопросы