#python
#python
Вопрос:
Мне нужно выровнять точку с запятой в строках. Например:
Input:
1-1: abc
1-2-1: defghi
1-2-1a: jklmnopqr
1-2-1a-1-1-1a: stuvwxyz
Ouput:
1-1 : abc
1-2-1 : defghi
1-2-1a : jklmnopqr
1-2-1a-1-1-1a: stuvwxyz
И вот мое решение.
strs = ['1-1: abc', '2-2-2: defghi', '3-3-3b: jklmnopqr', '1-2-1a-1-1-1a: stuvwxyz']
lengths = [s.find(':') for s in strs]
for i, s in enumerate(strs):
if lengths[i] == -1:
new_strs.append(s)
else:
new_strs.append(s[:lengths[i]] ' ' * (max(lengths) - lengths[i]) s[lengths[i]:])
Есть ли какой-нибудь простой способ реализации? Спасибо.
Ответ №1:
Такие функции, как ljust
и rjust
являются вашими друзьями при попытке выровнять вывод:
>>> aligned = [f"{s.split(':')[0].ljust(max(s.index(':') for s in strs))}:{s.split(':')[1]}" for s in strs]
>>> print("n".join(aligned))
1-1 : abc
2-2-2 : defghi
3-3-3b : jklmnopqr
1-2-1a-1-1-1a: stuvwxyz
или немного менее компактно:
>>> i = max(s.index(":") for s in strs)
>>> cols = [s.split(":") for s in strs]
>>> aligned = [f"{c[0].ljust(i)}:{c[1]}" for c in cols]
Ответ №2:
Python f-строки позволяют ссылаться на переменные в текущем пространстве имен. Кроме того, его спецификация формата также позволяет дескрипторам полей также поступать из переменных. После разделения двух частей строки найдите самое длинное значение слева от двоеточия, и у вас будет заполнение для всех них.
>>> strs = ['1-1: abc', '2-2-2: defghi', '3-3-3b: jklmnopqr', '1-2-1a-1-1-1a: stuvwxyz']
>>> parts = [s.split(":", 1) for s in strs]
>>> field_len = max(len(p[0]) for p in parts)
>>> for p0, p1 in parts:
... print(f"{p0:<{field_len}s}: {p1}")
...
1-1 : abc
2-2-2 : defghi
3-3-3b : jklmnopqr
1-2-1a-1-1-1a: stuvwxyz