【问题标题】:Print lists in a list in columns在列中的列表中打印列表
【发布时间】:2024-01-31 05:40:02
【问题描述】:

我有一个包含列表的列表,我想在列中打印它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 list printing multiple-columns


    【解决方案1】:

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

    transposed_tabe = zip(*tableData )

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

    transposed_tabe = zip(*my_list )

    将产生以下输出

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

    【讨论】:

      【解决方案2】:

      你可以像这样使用zip()

      >>> for v in zip(*tableData):
              print (*v)
      
      a 1 one
      b 2 two
      c 3 three
      d 4 four
      

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

      【讨论】:

      • 非常感谢!我知道有一个简单的方法。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            最近更新 更多