我知道函数 print()
可以 align text to right or to left ,但是我可以两边对齐吗?
示例: 这段文字:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit.
应该是这样的:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit.
最佳答案
据我所知,没有办法做到这一点。但是您可以尝试自己解决它:
一种可能的(看起来不太好看)算法:
- 将文本分割成行
- 找到最长的线
- 对于所有其他线路:
- 找到第一个空格,然后添加另一个空格
- 如果仍然不够长,则移至下一个尚未拉长的空间
这可能看起来像这样:
def justify_text(text):
# split text into lines and find longest
lines = [line.strip() for line in text.split("\n")]
ll = len(max(lines, key=len))
# iterate lines
for i, l in enumerate(lines):
# remember last elongates space
pos_space = 0
# do for all lines but the last one
while len(l) < ll and (i != len(lines)-1):
# print(l) # uncomment to see stages of refining
pos_space = l.find(" ", pos_space)
if pos_space == -1:
# start over from beginning
pos_space = l.find(" ", 0)
if pos_space == -1:
# no space inside the line, can't do anything about it
# we break to avoid endless loop
break
# splice in a space and increase next search position
l = l[:pos_space] + " " + l[pos_space:]
pos_space += 2
# store changed line
lines[i] = l
return '\n'.join(lines)
t = """Lorem ipsum dolor sit amet, consectetur adipiscing more text
elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit."""
print(justify_text(t))
并产生:
Lorem ipsum dolor sit amet, consectetur adipiscing more text
elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit.
为了更接近文本的外观,您必须通过从该行的两侧交替搜索来找到拉长的空间。
如果您不从已经分行的文本开始,您可以执行预先步骤(尽管在这种情况下使用 linked algo from codereview 更有效):
t = """Lorem ipsum dolor sit amet, consectetur adipiscing more text elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit."""
def prep_text(text, no_longer_then=50):
words = text.split(" ")
result = [[]]
for w in words:
if sum(len(part) for part in result[-1]) + len(w) > no_longer_then:
result.append([w])
else:
result[-1].append(w)
print(result)
return '\n'.join(' '.join(inner) for inner in result)
prepped = prep_text(t)
print(prepped)
输出:
# 1 2 3 4 5
# 345678901234567890123456789012345678901234567890
Lorem ipsum dolor sit amet, consectetur adipiscing
more text elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit.
关于python - 在 Python 中对齐两侧的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64925614/