Вы можете предварительно вычислить самый длинный URL и left -обосновать эту запись точками, чтобы она лучше сочеталась:
In [5]: signs = ['-', '+', '-']
...: URLs = ['http://foo.com', 'http://much_longer_foo.com', 'http://medium_foo.com']
...: tails = ['Longer shouting ending!!', 'different ending', 'Longer shouting ending!!']
...:
...: maxlen = max(map(len,URLs))
...: linefmt = " [{{sign}}] {{URL:.<{maxlen}}}{{tail:.>30}}".format(maxlen=maxlen)
...: for sign,URL,tail in zip(signs,URLs,tails):
...: print linefmt.format(sign=sign, URL=URL, tail=tail)
...:
[-] http://foo.com..................Longer shouting ending!!
[+] http://much_longer_foo.com..............different ending
[-] http://medium_foo.com...........Longer shouting ending!!
Как видите, я изменилк использованию .format
вместо процентного форматирования.Это в основном вопрос предпочтения.
Важно то, что мы сначала строим строку формата с длиной самого длинного URL, а затем используем полученную строку формата.Результат немного отличается от того, что вы ожидаете: вокруг точек нет пробелов.Вы можете добавить их вручную, если вы настаиваете на их наличии.
Обратите внимание, что в Python 3.6 и выше вы можете использовать f-strings , чтобы сделать это более элегантно:
In [1]: signs = ['-', '+', '-']
...: URLs = ['http://foo.com', 'http://much_longer_foo.com', 'http://medium_foo.com']
...: tails = ['Longer shouting ending!!', 'different ending', 'Longer shouting ending!!']
...:
...: maxlen = max(map(len,URLs))
...: for sign,URL,tail in zip(signs,URLs,tails):
...: print(f' [{sign}] {URL:.<{maxlen}}{tail:.>30}')
...:
...:
[-] http://foo.com..................Longer shouting ending!!
[+] http://much_longer_foo.com..............different ending
[-] http://medium_foo.com...........Longer shouting ending!!
Также, как вы можете видеть, я бы предложил использовать одну строку формата и передать ей знак / URL / окончание отдельно.Это поможет вам уменьшить повторение кода и упростить поддержку.