在列的列表中打印列表

时间:2016-02-23 14:23:09

标签: python list printing multiple-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," "))

5 个答案:

答案 0 :(得分:4)

你可以这样使用zip()

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

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

你可以明显改善格式化(就像@Holt做得很好),但这是基本的方法:)

答案 1 :(得分:2)

您可以使用zip转置您的表格,然后使用formatted string输出您的行:

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

答案 2 :(得分:0)

你想转置这个。这在python中最容易。之后,您只需要关心自己的打印格式。

transposed_tabe = zip(*tableData )

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

transposed_tabe = zip(*my_list )

将进行以下输出

[('数学','物理','生物'),(80,90,50)]

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

如果要自动使用.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