【问题标题】:Formatting Python output into rows将 Python 输出格式化为行
【发布时间】:2017-01-31 22:04:29
【问题描述】:

所以,我对编程还是有点陌生​​,我正在尝试在 Python 中格式化一些数组的输出。我发现很难理解格式化的某些方面。 我有几个要以表格格式打印的数组。

headings = ["Name", "Age", "Favourite Colour"]
names = ["Barry", "Eustace", "Clarence", "Razputin", "Harvey"]
age = [39, 83, 90, 15, 23]
favouriteColour = ["Green", "Baby Pink", "Sky Blue", "Orange", "Crimson"]

我希望输出如下所示:(列宽略大于该列的最大长度)

Name          Age        Favourite Colour
Barry         39         Green
Eustace       83         Baby Pink
Clarence      90         Sky Blue
Razputin      15         Orange
Harvey        23         Crimson

我尝试过这样做:

mergeArr = [headings, name, age, favouriteColour]

但是(我认为)不会在正确的位置打印标题?

我试过这个:

mergeArr = [name, age, favouriteColour] 
col_width = max(len(str(element)) for row in merge for element in row) + 2

for row in merge:
    print ("".join(str(element).ljust(col_width) for element in row))

但这会以列而不是行的形式打印每个对象的数据。

感谢您的帮助!谢谢。

【问题讨论】:

  • mergename 在您的示例代码中均未定义

标签: python


【解决方案1】:

您可以单独打印标题(带有姓名、年龄、喜欢的颜色的标题)。

然后你使用你拥有的代码,但是:

rows = zip(name, age, favouriteColour)
for row in rows...

您还可以查看 tabulate 包以获取格式良好的表格。

【讨论】:

    【解决方案2】:

    只需添加额外的格式:

    ll = [headings] + list(zip(names, age, favouriteColour))
    
    for l in ll:
        print("{:<10}\t{:<2}\t{:<16}".format(*l))
    
    # Name          Age Favourite Colour
    # Barry         39  Green     
    # Eustace       83  Baby Pink 
    # Clarence      90  Sky Blue  
    # Razputin      15  Orange    
    # Harvey        23  Crimson  
    

    花括号中的部分是 python 的新字符 formatting 功能的一部分,而 TAB 用作分隔符。总而言之,.format() 方法在字符串部分内查找那些花括号,以确定容器 l 内的哪些值 去 where这些值应该如何格式化。例如,在标题的情况下,发生了以下情况:

    headings = ["Name", "Age", "Favourite Colour"]
    print("{:<10}\t{:<3}\t{:<16}".format(*headings))
    
    • 我们使用列表前面的星号 (*) 来 unpack 该列表中的元素。

    • 第一个花括号用于字符串“Name”,格式为:&lt;10,表示如果字符串长度较小,则向左调整并用多余的空格字符填充大于 10。本质上,它将打印给定字符串中的所有字符,并在该字符串的右侧添加额外的空格。

    • 第二个花括号代表“年龄”,格式为:&lt;3

    • 第三个花括号代表“最喜欢的颜色”,格式为:&lt;16

    • 所有这些字符串都用 TAB 字符分隔。

    以上步骤在 print 函数中的组合产生:

    # Name          Age Favourite Colour
    

    我希望这证明有用。

    【讨论】:

    • 谢谢!这行得通。你能向我解释一下花括号内的部分到底是做什么的吗?我有点明白,但不完全明白。我认为 '\t' 表示 TAB 是否正确? * 是什么意思?
    【解决方案3】:

    使用zip(*iterables):

    print(heading)
    for row in zip(names, age, favouriteColour):
      print(row) # formatting is up to you :)
    

    【讨论】:

      【解决方案4】:

      Jacob Krall 关于使用zip 组合您的列表是完全正确的。但是,一旦你这样做了,如果你希望你的列很好地对齐(假设你使用的是 Python 3.x)然后看看 .format() 方法,它可用于字符串并作为 Python @987654323 的一部分@ 功能。这允许您在输出中指定字段宽度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 2016-12-26
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        相关资源
        最近更新 更多