如何在python中将字符串列表打印到表中?

时间:2015-06-20 14:07:36

标签: python string list printing

这是清单

tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

这就是我想要的样子

  苹果爱丽丝狗

     橘子鲍勃猫

     樱桃卡罗尔驼鹿

     香蕉大卫鹅

2 个答案:

答案 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