首页 > 解决方案 > 如何使用 for 循环在单独的列中打印列表中的列表?

问题描述

问题来自 ATBS 的第 6 章。它是创建一个传递列表列表的函数,然后打印每个列表,但要对齐,以便每列整齐且齐平,而不管列表中字符串的长度如何。

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

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)

这将打印以下内容

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

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

标签: pythonlist

解决方案


尝试这个:

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以证明不仅为当前列,而且为所有以前的列。

好在你已经把所有宽度都放在了一个列表中:)


推荐阅读