如何在Python中简单地将字符串中的分号对齐?

2024-04-28 11:13:20 发布

您现在位置: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]:])

有什么简单的方法可以实现吗?多谢各位


Tags: 字符串innewforinputfind解决方案abc
2条回答

在尝试对齐输出时,像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]

pythonf-strings允许您引用当前命名空间中的变量。此外,其格式规范还允许字段描述符也来自变量。拆分字符串的两部分后,在冒号左侧找到最长的值,就可以填充所有的值

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

相关问题 更多 >