python - 如何循环遍历空格列表并在特定情况下将空格分配到另一个列表?

标签 python string cycle justify

我想对齐文本。为此,我使用 Textwrap 来适应给定宽度的每行最大字数。现在,我需要通过添加空格来填充具有以下标准的行,以确保每行都占据给定的宽度 (30):首先是大的间隙,然后是较小的间隙 ('Lorem--ipsum--dolor- -sit-amet,' (2, 2, 2, 1 个空格))。

import textwrap
def justify(text, width):
    max_words_per_line = textwrap.wrap(text, width, break_long_words=False)
    # I am stuck here, I have tried using the cycle module but I cannot make it work 
max_words_per_line = 
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Vestibulum sagittis dolor
mauris, at elementum ligula
tempor eget. In quis rhoncus
nunc, at aliquet orci. Fusce
at dolor sit amet felis
suscipit tristique. Nam a
imperdiet tellus. Nulla eu
vestibulum urna. Vivamus
tincidunt suscipit enim, nec
ultrices nisi volutpat ac.
Maecenas sit amet lacinia
arcu, non dictum justo. Donec
sed quam vel risus faucibus
euismod. Suspendisse rhoncus
rhoncus felis at fermentum.
Donec lorem magna, ultricies a
nunc sit amet, blandit
fringilla nunc. In vestibulum
velit ac felis rhoncus
pellentesque. Mauris at tellus
enim. Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi sit amet hendrerit
fringilla, ante odio porta
lacus, ut elementum justo
nulla et dolor.

我的愿望:

Lorem  ipsum  dolor  sit amet,
consectetur  adipiscing  elit.
Vestibulum    sagittis   dolor
mauris,  at  elementum  ligula
tempor  eget.  In quis rhoncus
nunc,  at  aliquet orci. Fusce
at   dolor   sit   amet  felis
suscipit   tristique.   Nam  a
imperdiet   tellus.  Nulla  eu
vestibulum    urna.    Vivamus
tincidunt  suscipit  enim, nec
ultrices   nisi  volutpat  ac.
Maecenas   sit   amet  lacinia
arcu,  non dictum justo. Donec
sed  quam  vel  risus faucibus
euismod.  Suspendisse  rhoncus
rhoncus  felis  at  fermentum.
Donec lorem magna, ultricies a
nunc    sit    amet,   blandit
fringilla  nunc. In vestibulum
velit    ac    felis   rhoncus
pellentesque. Mauris at tellus
enim.  Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi    sit   amet   hendrerit
fringilla,   ante  odio  porta
lacus,   ut   elementum  justo
nulla et dolor.

最佳答案

data = '''Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Vestibulum sagittis dolor
mauris, at elementum ligula
tempor eget. In quis rhoncus
nunc, at aliquet orci. Fusce
at dolor sit amet felis
suscipit tristique. Nam a
imperdiet tellus. Nulla eu
vestibulum urna. Vivamus
tincidunt suscipit enim, nec
ultrices nisi volutpat ac.
Maecenas sit amet lacinia
arcu, non dictum justo. Donec
sed quam vel risus faucibus
euismod. Suspendisse rhoncus
rhoncus felis at fermentum.
Donec lorem magna, ultricies a
nunc sit amet, blandit
fringilla nunc. In vestibulum
velit ac felis rhoncus
pellentesque. Mauris at tellus
enim. Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi sit amet hendrerit
fringilla, ante odio porta
lacus, ut elementum justo
nulla et dolor.'''

from itertools import cycle

for line in data.splitlines():
    words = line.split()
    _l = [[' '] for i in range(len(words)-1)]
    spaces = cycle(_l)
    for s, i in zip(spaces, range(30-len(line))):
        s[-1] += ' '
    for w, _l in zip(words, _l):
        print(''.join([w, *_l]), end='')
    print(words[-1])

打印:

Lorem  ipsum  dolor  sit amet,
consectetur  adipiscing  elit.
Vestibulum    sagittis   dolor
mauris,  at  elementum  ligula
tempor  eget.  In quis rhoncus
nunc,  at  aliquet orci. Fusce
at   dolor   sit   amet  felis
suscipit   tristique.   Nam  a
imperdiet   tellus.  Nulla  eu
vestibulum    urna.    Vivamus
tincidunt  suscipit  enim, nec
ultrices   nisi  volutpat  ac.
Maecenas   sit   amet  lacinia
arcu,  non dictum justo. Donec
sed  quam  vel  risus faucibus
euismod.  Suspendisse  rhoncus
rhoncus  felis  at  fermentum.
Donec lorem magna, ultricies a
nunc    sit    amet,   blandit
fringilla  nunc. In vestibulum
velit    ac    felis   rhoncus
pellentesque. Mauris at tellus
enim.  Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi    sit   amet   hendrerit
fringilla,   ante  odio  porta
lacus,   ut   elementum  justo
nulla         et        dolor.

编辑:如果最后一行不必合理,请使用:

from itertools import cycle

lines = data.splitlines()

for line in lines[:-1]:
    words = line.split()
    _l = [[' '] for i in range(len(words)-1)]
    spaces = cycle(_l)
    for s, i in zip(spaces, range(30-len(line))):
        s[-1] += ' '
    for w, _l in zip(words, _l):
        print(''.join([w, *_l]), end='')
    print(words[-1])

print(lines[-1])

打印:

Lorem  ipsum  dolor  sit amet,
consectetur  adipiscing  elit.
Vestibulum    sagittis   dolor
mauris,  at  elementum  ligula
tempor  eget.  In quis rhoncus
nunc,  at  aliquet orci. Fusce
at   dolor   sit   amet  felis
suscipit   tristique.   Nam  a
imperdiet   tellus.  Nulla  eu
vestibulum    urna.    Vivamus
tincidunt  suscipit  enim, nec
ultrices   nisi  volutpat  ac.
Maecenas   sit   amet  lacinia
arcu,  non dictum justo. Donec
sed  quam  vel  risus faucibus
euismod.  Suspendisse  rhoncus
rhoncus  felis  at  fermentum.
Donec lorem magna, ultricies a
nunc    sit    amet,   blandit
fringilla  nunc. In vestibulum
velit    ac    felis   rhoncus
pellentesque. Mauris at tellus
enim.  Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi    sit   amet   hendrerit
fringilla,   ante  odio  porta
lacus,   ut   elementum  justo
nulla et dolor.

关于python - 如何循环遍历空格列表并在特定情况下将空格分配到另一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989095/

相关文章:

没有导入调用的python ImportError

python - 如何在 Python 中创建带换行符的字符串?

algorithm - 在特殊有向图中查找所有权重 > 0 的循环

algorithm - 如何使用不相交集检测无向图中的循环?

python - 使用 pythonscript 在 Notepad++ 中安装 python 包

python - Pandas groupby 链接 : rename multi-index column to one row column

java - 如何处理字符串反转中的 "\n"等特殊字符?

c# - 在 C# 中根据空格拆分字符串

Java程序对n个数字的基数^指数求和,而下一个基数和指数是(n-1)

python - 将 pandas groupby 操作的输出保存为 CSV