如何在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]:])

有什么简单的实现方法吗?非常感谢。

ljustrjust这样的函数在尝试对齐输出时是您的朋友:

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

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

最新更新