首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中简单地将字符串中的分号对齐?

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

Stack Overflow用户
提问于 2020-12-14 09:03:56
回答 2查看 50关注 0票数 0

我需要在字符串中对齐分号。例如:

代码语言:javascript
复制
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

下面是我的解决方案。

代码语言:javascript
复制
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]:])

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 09:12:04

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

代码语言:javascript
复制
>>> 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

或者不那么紧凑:

代码语言:javascript
复制
>>> 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
EN

Stack Overflow用户

发布于 2020-12-14 09:25:09

Python f字符串允许您引用当前名称空间中的变量。此外,它的格式规范还允许字段描述符也来自变量。在拆分字符串的两个部分之后,找到冒号左边最长的值,您就有了所有这些部分的填充。

代码语言:javascript
复制
>>> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65282391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档