简体   繁体   中英

String alignment when printing in python

I want to output text like so:

Якета            : **************************** 1250.23 €
Обувки за футбол : ********************** 912.30 €
Екипи            : ************** 513.45 €
Топки            : ************ 502.52 €
T-SHIRTS         : ********* 420.19 €

How can I use placeholders to indent all colons to the length of the longest string - in this case Обувки за футбол ?

Probably, the most elegant way is to use the format method. It allows to easily define the space a string will use:

>>> name = 'Якета'
>>> asterisks = '****************************'
>>> price = 1250.23
>>> print '{0:17}: {1} {2} €'.format(name, asterisks, price)
Якета       : **************************** 1250.23 €

Should you need to programmatically define padding size (for instance, to dynamically accept larger strings instead of hard-coding its size), simply use ljust :

>>> name = 'Якета'
>>> asterisks = '****************************'
>>> price = 1250.23
>>> padding = 17
>>> print '{0}: {1} {2} €'.format(name.ljust(padding), asterisks, price)
Якета       : **************************** 1250.23 €

Considering the case when the maximum string size is unknown previously and the script must adapt to it, we only need to calculate the maximum string size and place it in padding :

>>> names = ['abc', 'defghijklm', 'op', 'q']
>>> asterisks = '****************************'
>>> price = 1250.23
>>> padding = max(map(len, strings))
>>> for name in names:
        print '{0}: {1} {2} €'.format(name.ljust(padding), asterisks, price)
abc       : **************************** 1250.23 €
defghijklm: **************************** 1250.23 €
op        : **************************** 1250.23 €
q         : **************************** 1250.23 €

This thread has a pretty similar issue.

I would do something like this (somewhat "hackish"):

  • Get the longest string longest = len(longest_string) . If you have your strings in a list then longest = len(max(mylist, key=len)) .
  • Calculate for all strings spaces = longest - len(str) .
  • Add spaces spaces to every end of string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM