如何在python中显示表格中每一行和每一列的总和

时间:2019-05-14 17:57:08

标签: python python-3.x

我正在尝试编写一个python程序,该程序将创建一个10 x 10的表(数组),并使用100个从1到250的随机整数自动填充该表。然后,该程序应显示每个行和列的总和该表。

我的程序当前输出的表包含100个随机整数以及每一行的总和。但是,它无法产生每一列的总和。

import random

dash = "-" * 62

print("Random Integer Table:")

print(dash)
print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL"))
print(dash)

for rows in range(10):
    random_list = [random.randrange(1,251, 1) for rows in range(10)]
    stringList = [str(i) for i in random_list]
    row_total = sum(random_list)

    print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(stringList[0], stringList[1], stringList[2], stringList[3], stringList[4], stringList[5], stringList[6], stringList[7], stringList[8], stringList[9]), "{:17d}".format(row_total))

print(dash)
print("COLUMN TOTAL")
print(dash)

sum(random_list(zip([0])))

程序当前输出以下内容:

Random Integer Table:
--------------------------------------------------------------
RANDOM INTEGERS                                     ROW TOTAL
--------------------------------------------------------------
71    29   33   69    6  188  167  158  126               892
100  114  109   89  237  168   25  201   43              1173
91    51   62  220   63   10   85   79  104               796
54   189   69   36  218  130  204   76   93              1289
113   36  104   81   18  215   53  169  103               925
92    20  206   16  116   69  237  168  212              1253
116   86  115   62  189  234  158  240  207              1602
35   101  234   25   41  136   73  154  197              1102
97    81   13   86   26  140  220   42  180              1132
118  117  134  170  237  212   89  140  124              1529
--------------------------------------------------------------
COLUMN TOTAL
--------------------------------------------------------------

但是有错误:

TypeError: 'list' object is not callable
当尝试打印每一列的总计时,

出现在我的代码的第30行(最后一行)中。有什么办法可以正确汇总这些列和/或提高程序效率?谢谢。

2 个答案:

答案 0 :(得分:1)

一种解决方案是在迭代每一行的同时保存列的总和。 这是一种方法:

import random
dash = "-" * 62

print("Random Integer Table:")

print(dash)
print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL"))
print(dash)
# Initialize a list that will have the sum of each column
sum_col = [0 for _ in range(10)]

for rows in range(10):
    random_list = [random.randrange(1, 251, 1) for rows in range(10)]

    # Save the current sum of each columns
    sum_col = [x + sum_part for x, sum_part in zip(random_list, sum_col)]

    stringList = [str(i) for i in random_list]
    row_total = sum(random_list)

    print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(stringList[0], stringList[1], stringList[2], stringList[
          3], stringList[4], stringList[5], stringList[6], stringList[7], stringList[8], stringList[9]), "{:17d}".format(row_total))

print(dash)
print("COLUMN TOTAL")
print(dash)

print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(sum_col[0], sum_col[1], sum_col[2], sum_col[
    3], sum_col[4], sum_col[5], sum_col[6], sum_col[7], sum_col[8], sum_col[9]), "{:17d}".format(sum(sum_col)))

# Random Integer Table:
# --------------------------------------------------------------
# RANDOM INTEGERS                                     ROW TOTAL
# --------------------------------------------------------------
# 147   54   61   56  183  172  228  110  241              1260
# 211   77   80  148  237   98   30   99    8              1016
# 216  241  200   31  218  122  183   34  118              1420
# 34   147  195  115   61   69  208  155   96              1203
# 174   27   39   40   99  241   11   92  114               838
# 102  131    8  130   22  225   80  152  159              1032
# 129   30  122   87  142  245  202   97   40              1280
# 219  226  147  153  217  242  154  129   39              1585
# 186   37  123  168   12  152  105  225   57              1072
# 120  243  146   39  216   50  177  208   36              1434
# --------------------------------------------------------------
# COLUMN TOTAL
# --------------------------------------------------------------
# 1538 1213 1121  967 1407 1616 1378 1301  908             12140

如果可以使用numpy,请使用它!这比较简单:) 希望有帮助!

答案 1 :(得分:0)

这里只是一个清洁工。我使用的是numpy而不是random。这样,您的随机表数组将根据需要保留。还要注意如何将</i>传递到格式字符串以减少键入。

stringList
import numpy as np

dash = "-" * 62

print("Random Integer Table:")

print(dash)
print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL"))
print(dash)


array_size = (10, 10)

random_array = np.random.random_integers(1, 251, size=array_size)

for i in range(array_size[0]):
    random_list = [j for j in random_array[i, :]]
    stringList = [str(j) for j in random_list]
    row_total = sum(random_list)
    print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(*stringList), "{:17d}".format(row_total))


print(dash)
print("COLUMN TOTAL")
print(dash)
column_totals = random_array.sum(axis=0)
print(" ".join(column_totals.astype(str)))