如何使用for循环在单独的列中打印列表中的列表?

时间:2019-06-23 12:18:49

标签: python list

问题出在ATBS的第6章。它将创建一个传递一个列表列表的函数,然后打印每个列表,但将其对齐以使每一列都整齐并齐平,而不管列表中字符串的长度如何。

我创建了一个空列表,其元素数量与每个嵌入列表相同(假定长度相同),并找到了每个列表中的最大字符串长度,并将此数字添加到了空列表中。然后调用以打印以最大字符串长度为理由的每个列表。

SELECT * FROM PROD A JOIN PROD B ON A.PROD-Project = B.PROD-Project WHERE B.PROD-Status = 'B'

这将打印以下

table = [['Tom','Dick','Harry','John'],
         ['Apples','Oranges','Strawberries','Grapes'],
         ['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]




def printTable(tableData):
    colWidths = [0] * len(tableData)
    for i in range(len(tableData)):
        colWidths[i] = max(len(j) for j in tableData[i])
    for i in range(len(tableData)):
        for j in tableData[i]:
            print(j.rjust(colWidths[i]))



printTable(table)

但是我希望它在三个单独的列中,而不是一列。我知道这可以简单地用zip完成,但我还没有介绍。我想了解如何在覆盖新内容之前使用for循环来完成工作,因为我认为这样做不会帮助我正确地学习基础知识。

3 个答案:

答案 0 :(得分:1)

尝试一下:

table = [['Tom','Dick','Harry','John'],
         ['Apples','Oranges','Strawberries','Grapes'],
         ['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]




def printTable(tableData):
    colWidths = [0] * len(tableData)
    for i in range(len(tableData)):
        colWidths[i] = max(len(j) for j in tableData[i])
    for i in range(len(tableData)):
        for j in tableData[i]:
            print(j.rjust(sum(colWidths[:i+1])))



printTable(table)

我所做的就是更改rjust,以证明不仅适用于当前列,而且适用于所有先前列。

好东西,您已经将所有宽度都放在列表中了:)

答案 1 :(得分:0)

这是开始的事情:第一行(之所以称为row0,因为它是索引为0的那一行)是

row0 = [x[0] for x in table]  

对于表中的每个列表x,您都采用第一个元素。

类似地构造第二行。

要获取所有行,请将其放入循环for i in range(4)

请注意,如果table中的一个元素的长度不同,则必须以某种方式进行处理,但是在您的示例中,table中的所有元素都具有相同的长度4

答案 2 :(得分:0)

    table = [['Tom','Dick','Harry','John'],
         ['Apples','Oranges','Strawberries','Grapes'],
         ['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]




def printTable(tableData):
    buffer = []
    colWidths = [0] * len(tableData)
    for i in range(len(tableData)):
        colWidths[i] = max(len(j) for j in tableData[i])
    for j in range(len(tableData[i])):
        buffer.append("") #filling the buffer array with empty string could have used buffer = ["" for i in range(len(tableData[i]]))]
    for i in range(len(tableData)): 
        for j in range(len(tableData[i])):
            buffer[j] += (tableData[i][j].rjust(colWidths[i]))
            buffer[j] += " "
    for i in range(len(buffer)):
        print(buffer[i])






printTable(table)

我所做的就是定义一个缓冲区数组来存储每一行​​,然后,我创建了另一个for循环来打印它们。当您打印一行时,您无法返回该行并添加新元素,因此您必须先创建要打印的行,然后再打印。由于您想要的输出在每个列表中都有一个项目,因此我将它们串联为一个字符串,并用空格分隔。

输出为

  Tom       Apples  Brocolli
 Dick      Oranges Asparagus
Harry Strawberries   Carrots
 John       Grapes  Potatoes