【问题标题】:2D list output formatting二维列表输出格式
【发布时间】:2015-07-28 10:43:21
【问题描述】:

所以,如前所述,它是一个二维列表。 7 行内 6 列(6 个随机数)。输出的格式应如下所示: http://i.stack.imgur.com/hwnHi.png

我的代码是这样的:

    print ("     ", 1 , "   ", 2, "   ",3, "   ",4, "   ",5, "   ",6)
print ()
for i in range(7):
    print (i+1, *Pizza[i], sep="     ")

print ("To", *sales_of_hours, sep="    ")

Pizza 是我的 2D 列表,sales_of_hours 是每列总计的列表,我还有另一个名为 sales_of_day 的列表,用于记录每一行的总计,但是当我尝试像这样将其添加到循环中时:

    for i in range(7):
    print (i+1, *Pizza[i], sep="     ", *sales_of_day[i])

我收到语法错误。 我做错了什么?

【问题讨论】:

  • 语法错误在哪里?
  • 在最后一个打印语句中。如果没有“*sales_of_day[i]”部分,它可以正常工作。

标签: python arraylist formatting output


【解决方案1】:

sales_of_day 很可能是一个一维列表,如果是这样,您不能解压缩 sales_of_day[i],因为那很可能是一个数字。

另外,你不需要手动给空格和所有,你可以使用str.format()的右对齐,达到类似的结果,代码-

print(' '*6,end='')
for i in range(6):
    print('{:>6}'.format(i+1),end="")
print('{:>6}'.format('Total'))

for i in range(7):
    print('{:>6}'.format(i+1),end='')
    for j in range(6):
        print('{:>6}'.format(pizza[i][j]),end="")
    print('{:>6}'.format(sales_of_day[i]))

print('{:>6}'.format('To'),end='')
for i in range(6):
    print('{:>6}'.format(sales_of_hours[i]),end='')
print()

{:>6} 格式强制字符串在可用空间内右对齐(这是数字的默认设置)。


演示 -

import random

pizza = [[random.randint(1,9) for j in range(6)] for i in range(7)]

print(' '*5,end='')
for i in range(6):
    print('{:>5}'.format(i+1),end="")
print('{:>5}'.format('Total'))

for i in range(7):
    print('{:>5}'.format(i+1),end='')
    for j in range(6):
        print('{:>5}'.format(pizza[i][j]),end="")
    print('{:>5}'.format(sum(pizza[i])))

print('{:>5}'.format('To'),end='')
for i in range(6):
    print('{:>5}'.format(random.randint(10,50)),end='')
print()

输出 -

> python a.py

         1    2    3    4    5    6Total
    1    4    6    6    2    6    9   33
    2    2    4    6    1    3    7   23
    3    1    4    3    5    7    1   21
    4    5    5    2    7    2    2   23
    5    3    1    6    8    1    7   26
    6    6    2    3    3    6    8   28
    7    3    9    6    6    4    4   32
   To   45   45   25   40   30   34

【讨论】:

    【解决方案2】:

    在 * 之后它必须是一个序列,因此请尝试从 sales_of_day 中删除 *

      space = " "*5
        for i in range(7):
            print (i+1, *Pizza[i], sep=space,end=space)
            print (sales_of_day[i])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-25
      • 2023-03-04
      • 2018-04-05
      • 1970-01-01
      • 2020-07-15
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多