在列中的列表中打印列表

Print lists in a list in columns

我有一个包含列表的列表,我想在 w/o 列中打印它以导入任何其他模块(即 pprint)。该任务仅供我了解列表的迭代。这是我的清单:

tableData = [['a', 'b', 'c', 'd'],
            ['1', '2', '3', '4'],
            ['one', 'two', 'three', 'four']]

我希望它看起来像这样:

a    1    one
b    2    two
c    3    three
d    4    four

我设法对它的第一行进行了一些硬编码,但我不知道如何为迭代建模。参见:

def printTable(table):
    print(table[0][0].rjust(4," ") + table[1][0].rjust(4," ") + table[2][0].rjust(4," "))

你想转置这个。这在 python 中最为简单。之后,您只需要关心自己的打印格式即可。

transposed_tabe = zip(*tableData )

如果你有一个列表 my_list = [('Math', 80), ('Physics',90), ('Biology', 50)] 那么我们可以说这是3X2矩阵。它的转置将是 2X3 矩阵。

transposed_tabe = zip(*my_list )

会产生如下输出

[('Math', 'Physics', 'Biology'), (80, 90, 50)]

您可以像这样使用 zip()

>>> for v in zip(*tableData):
        print (*v)

a 1 one
b 2 two
c 3 three
d 4 four

您显然可以改进格式(就像@Holt 做得很好)但这是基本方法:)

您可以使用 zip to transpose your table and then use a formatted string 输出您的行:

row_format = '{:<4}' * len(tableData)
for t in zip(*tableData):
    print(row_format.format(*t))

如果您仍然需要可变字符串,只需一次打印一行:

for k in range(len(tableData[0])):
    for v in range(len(tableData)):
        print(tableData[v][k], end = ' ')
    print()

通过这种方式,您可以使用经典的字符串方法 ljust() rjust() 和 center() 来格式化您的列。

如果你想自动使用 .rjust,假设你有包含相同数量字符串的列表,你可以这样做:

def printTable(data):
    colWidths = [0] * len(data)
    for i in range(len(data)):
        colWidths[i] = len(max(data[i], key=len))

    for item in range(len(data[0])):
        for i in range(len(data)):
            print(str(data[i][item]).rjust(colWidths[i]), end=' ')
        print()


printTable(tableData)

这样您就不必手动检查列表中最长字符串的长度。 结果:

a 1   one 
b 2   two 
c 3 three 
d 4  four