<p>你可以用空格填充str.format格式(). 你知道吗</p>
<pre><code>def draw_padded_string(s, width, align="left"):
if align == "left":
return "{s: <{width}}".format(s=s, width=width)
elif align == "center":
return s.center(width, ' ')
elif align == "right":
return "{s: >{width}}".format(s=s, width=width)
</code></pre>
<p>在本例中,s是字符串,width是列的整个宽度。你知道吗</p>
<p>您可以在代码中的某个地方定义它,可能是在您的导入下,只是为了让它远离您的方式,但只要它是在您开始调用print语句之前定义的。这也会稍微改变您的打印块:</p>
<pre><code>width = 13
headers = ["Wind Speed", "Old Formula", "New Formula", "Difference"]
print_headers = []
for header in headers:
print_headers.append(draw_padded_string(header, width))
print("".join(print_headers))
print()
for row in entries:
print_row = []
for data in row:
print_row.append(draw_padded_string(data, width))
print("".join(print_row))
</code></pre>
<p>我所做的:</p>
<ul>
<li>将宽度设置为13(当前最宽的列是11)</li>
<li>为要打印的每行创建列表</li>
<li>将我们的函数应用于列表中的每一项</li>
<li>使用<code>"".join(list)</code>将列表打印为一行</li>
<li>从使用<code>i</code>和<code>j</code>的整数跟踪改为让python在您的行和列上迭代</li>
</ul>
<p>您可能希望采取的不同做法:</p>
<ul>
<li>使用列表理解生成列表(而不是<code>for item in list</code></li>
<li>根据实际的最大列表调整列宽,如下所示</li>
</ul>
<pre><code>column_length = max([len(word) for word in list_of_words])
</code></pre>