<p>没有第三方熊猫的类似格式:</p>
<pre><code>tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
# Find the max length of the word in each row
lens = [max(len(col) for col in row) for row in tableData]
# zip(*list) transposes a list...rows become columns
for row in zip(*tableData):
# Pass the column widths dynamically.
print('{:>{lens[0]}} {:>{lens[1]}} {:>{lens[2]}}'.format(*row,lens=lens))
</code></pre>
<p>输出:</p>
^{pr2}$
<p><strong>编辑</strong></p>
<p>以下是一个可以动态显示任意数量的行和列的版本:</p>
<pre><code>tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
# Find the max length of the word in each row
lens = [max(len(col) for col in row) for row in tableData]
# build a format string with an entry for each column
rowfmt = '{:>{}} ' * len(tableData)
# zip(*list) transposes a list...rows become columns
for row in zip(*tableData):
# Pass the values and column widths dynamically.
# The zip pairs up each datum with its column width, but in tuples.
# For example, [data1,data2],[width1,width2] -> [(data1,width1),(data2,width2)]
# itertools.chain flattens the list of tuples.
# For example, above becomes [data1,width1,data2,width2]
print(rowfmt.format(*itertools.chain(*zip(row,lens))))
</code></pre>