【问题标题】:Create a table from a list of tuples in Python 3从 Python 3 中的元组列表创建表
【发布时间】:2015-11-27 08:37:28
【问题描述】:

我有作业,我必须拿出一个包含元组的列表并打印出一张表格。例如,列表可能如下所示:

data = [('Item1', a1, b1, c1, d1, e1, f1),
        ('Item2', a2, b2, c2, d2, e2, f2),
        ('Item3', a3, b3, c3, d3, e3, f3)]

我必须打印出来:

            Item1   Item2   Item3
DataA:      a1      a2      a3
DataB:      b1      b2      b3
DataC:      c1      c2      c3
DataD:      d1      d2      d3
DataE:      e1      e2      e3
DataF:      f1      f2      f3

我已经初始化了一个列表:

data_headings = ['','DataA:','DataB','DataC:','DataD:','DataE':,'DataF:']

我的老师还让我们选择使用他创建的函数:

display_with_padding(str):
     print("{0: <15}".format(s), end = '')

非常感谢您提供有关如何执行此操作的指导。过去一天我一直在玩这个,但我仍然无法解决它。

【问题讨论】:

  • 我回答你的问题了吗?

标签: python list python-3.x formatting iteration


【解决方案1】:
def display_with_padding(s):
     print("{0: <15}".format(s), end='')

def print_row(iterable):
    [display_with_padding(x) for x in iterable]
    print()

def main():

    data = [
        ('Item1', 'a1', 'b1', 'c1', 'd1', 'e1', 'f1'),
        ('Item2', 'a2', 'b2', 'c2', 'd2', 'e2', 'f2'),
        ('Item3', 'a3', 'b3', 'c3', 'd3', 'e3', 'f3')
    ]

    col_headers = [''] + [x[0] for x in data]  # Build headers
    print_row(col_headers)


    labels = ['DataA:','DataB:','DataC:','DataD:','DataE:','DataF:']

    # Build each row
    rows = []
    for row_num, label in enumerate(labels, start=1):
        content = [label]
        for col in data:
            content.append(col[row_num])
        rows.append(content)

    for row in rows:
        print_row(row)


if __name__ == '__main__':
    main()

【讨论】:

    【解决方案2】:

    诀窍是以某种顺序遍历表格的每个元素。先行还是先列?

    因为您是逐行打印,所以您必须先遍历行,然后在每一列中查找相应的值。注意data 是一个列列表,而第二个列表为每一行提供一个标签。在下面的演示中,我已将其重命名为 row_labels

    def display_with_padding(s):
      print("{0: <15}".format(s), end = '')
    
    data = [('Item1', 'a1', 'b1', 'c1', 'd1', 'e1', 'f1'),
            ('Item2', 'a2', 'b2', 'c2', 'd2', 'e2', 'f2'),
            ('Item3', 'a3', 'b3', 'c3', 'd3', 'e3', 'f3')]
    
    row_labels = ['', 'DataA:', 'DataB:', 'DataC:', 'DataD:', 'DataE:', 'DataF:']
    
    for row_index, label in enumerate(row_labels):
      display_with_padding(label)
      for column in data:
        display_with_padding(column[row_index])
      print()
    

    注意使用enumerate() 在我们迭代row_labels 的同时获取索引和值。

    哦,我修复了您发布的代码中的一些错误。函数定义存在一些问题(缺少def 和错误的参数名称)以及行标签中的语法错误。我也重命名了行标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-21
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多