这是清单
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
这就是我想要的样子
苹果爱丽丝狗 橘子鲍勃猫 樱桃卡罗尔驼鹿 香蕉大卫鹅
答案 0 :(得分:1)
转置并使用str.join:
print("\n".join(" ".join(t) for t in zip(*tableData)))
输出:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
zip(*tableData)
转置数据:
[('apples', 'Alice', 'dogs'), ('oranges', 'Bob', 'cats'), ('cherries', 'Carol', 'moose'), ('banana', 'David', 'goose')]
然后我们只加入每个元组用空格分隔的元素,并使用换行符作为分隔符连接结果。
使用python3,可以使用sep
:
print(*(" ".join(t) for t in zip(*tableData)), sep="\n")
答案 1 :(得分:0)
虽然没有提供完全相同的输出,但您可能有兴趣了解csvkit
如何处理绘图表:
https://github.com/onyxfish/csvkit/blob/master/csvkit/utilities/csvlook.py#L40
您可以根据需要进行修改(例如,如果不需要,可以删除所有边框)。走在前面,为你快点做到了:
import sys
def draw_table(rows):
widths = []
# Calculate the width of each column
for row in rows:
for i, v in enumerate(row):
try:
if len(v) > widths[i]:
widths[i] = len(v)
except IndexError:
widths.append(len(v))
for i, row in enumerate(rows):
for j, d in enumerate(row):
if d is None:
d = ''
sys.stdout.write(d.ljust(widths[j] + 1))
sys.stdout..write('\n')
然后您可以传递表格数据:
> draw_table(table_data)
apples oranges cherries banana
Alice Bob Carol David
dogs cats moose goose