我需要在字符串中对齐分号。例如:
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]:])有什么简单的实现方法吗?谢谢。
发布于 2020-12-14 09:12:04
在尝试对齐输出时,像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]发布于 2020-12-14 09:25:09
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: stuvwxyzhttps://stackoverflow.com/questions/65282391
复制相似问题