Reputation: 893
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 Обувки за футбол
?
Upvotes: 1
Views: 2334
Reputation: 2460
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.
Upvotes: 2
Reputation: 15310
I would do something like this (somewhat "hackish"):
longest = len(longest_string)
. If you have your strings in a list
then longest = len(max(mylist, key=len))
.spaces = longest - len(str)
. spaces
spaces to every end of string.Upvotes: 1