簡體   English   中英

如何簡單地將分號與 Python 中的字符串對齊?

[英]how to simply align semicolon from strings in 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]:])

有什么簡單的實現方法嗎? 謝謝你。

在嘗試對齊 output 時,像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-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM