【问题标题】:How to print a 2-D Python list in a nice format? [duplicate]如何以漂亮的格式打印二维 Python 列表? [复制]
【发布时间】:2020-12-12 04:25:53
【问题描述】:

我很难将二维列表打印成漂亮的表格格式。 这是预期的输出: Click to see the expected output 这是我正在使用的代码: Click to see my code 然而,我得到的输出并没有很好地呈现,每个行元素之间的间距并不一致: Click to see my output

请帮我解决这个问题。非常感谢!

【问题讨论】:

  • 可以在这里分享文本格式的输入数据吗?
  • 请将代码作为文本包含在问题中,而不是作为图像。
  • displayStock = [["No","Company","Cap","Qty","BoughtPrice","MarketPrice"],["1","Microsoft","Mega", 100,188,207],["2","Amazon","Mega",5,1700,3003],["3","PayPal","Large",80,100,188],["4","Apple","Large ",100,60,110],["5","Fastly","Mid",30,40,76],["6","Square", "Mid",30,40,178]] 对于 displayStock 中的 x:对于 x 中的 y: print(y,"\t",end="") print()
  • 以上是我使用的代码,但是无法生成漂亮的表格格式...

标签: python list


【解决方案1】:

您可以在此处使用 pandas 数据框。 它会打印出漂亮的表格格式的数据:

import pandas as pd
df = pd.DataFrame({'No.':'1st column data','company':'2nd column data'}) and so on.

列数据应为列表格式。

【讨论】:

  • 好的,我试试,谢谢!
【解决方案2】:

试试这个:

import pandas as pd

display_stock = [
                ["No","Company", "Cap", "Qty", "BoughtPrice", "MarketPrice"],
                ["1","MS", "Large", 10, 43, 45],
                ["2","Amazon", "Large", 10, 43, 450],
                ["3","Small Co", "Small", 100, 10, 7]
            ]

df = pd.DataFrame( data = display_stock[1:] , columns = display_stock[0])

print(df.to_string(index=False))

结果成:

   No   Company    Cap  Qty  BoughtPrice  MarketPrice
   1        MS  Large   10           43           45
   2    Amazon  Large   10           43          450
   3  Small Co  Small  100           10            7

【讨论】:

  • 是的,它有效!非常感谢!
【解决方案3】:

有很多方法可以解决这个问题。正如您从@shekaha 的帖子中看到的那样,可以使用其他库(例如 Pandas)来为您完成这项工作。看来您是 Python 新手,所以我建议您考虑学习如何自己动手。

下面是一个非常简单的格式化示例。对于真正的应用程序,您会希望使事情变得更加健壮。

对于您的应用程序,请务必记住,当您打印某些内容时,所有内容最终都会转换为字符串。因此,如果您希望列“对齐”,您需要确保表示每列中每个项目的字符串具有相同的长度(包括空格。由于您的输入包含整数和字符串,因此您需要转换一切都先变成一个字符串。

newData = [[str(v) for v in vs] for vs in displayStock]

现在,您需要计算每列的最大长度。有很多方法可以做到这一点。我将通过几个步骤来简化操作:

lengths = [[len(v) for v in vs] for vs in newData]
maxLens = [max(lengths) for lengths in zip(*lengths)]

maxLens 将为您提供每列的最大长度。您必须生成要在每一行中打印的具有正确长度的正确文本。这是一个如何做到这一点的示例

printStrs = [ ' '.join([ f'{v:{maxLens[i]}}' for i, v in enumerate(vs) ]) for vs in newData]
toPrint = '\n'.join( printStrs )

最后一个变量toPrint 可用于打印结果。

考虑查看结果并找出如何改进结果。例如,您可能希望不同的列右对齐或左对齐。试着弄清楚你将如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2011-06-24
    • 2017-09-16
    • 2016-07-01
    • 2011-03-21
    相关资源
    最近更新 更多