python中每行和每列的总和,不使用numpy

时间:2014-12-16 13:58:03

标签: python

我在python中有foll代码:

 import random
    n=int(input("Enter the limit of your matrix:"))
    a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
    for i in range(0,n):
        for j in range(0,n):
            a[i][j]=int(input("Enter the element:"))
    for i in range(0,n):
        for j in range(0,n):
            if i==j:
                print a[i][j]
    for i in range(0,n):
        for j in range(0,n):
            if i==(n-j-1) or i==(n-j+1):
                print a[i][j]

但当限制为gn为3时,这不需要9个输入。 在输入7个输入后显示错误。请帮我纠正它。我不应该使用numpy

3 个答案:

答案 0 :(得分:3)

创建矩阵

def createMatrix(n):
    import random
    return [[random.randint(1,9) for _ in range(n)] for _ in range(n)]

>>> createMatrix(3)
[[5, 3, 1],
 [3, 6, 7],
 [3, 2, 9]]

汇总所有值

def sumMatrix(m):
    return sum(sum(i) for i in m)

>>> sumMatrix(a)
39

总结特定列

def sumColumn(m, c):
    return sum(i[c] for i in m)

>>> sumColumn(a, 1)
11

总结一个特定的行

def sumRow(m, r):
    return sum(m[r])

>>> sumRow(a, 0)
9

答案 1 :(得分:2)

所以问题在于

a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]

不是一个n*n矩阵,这是你想要的,它是一个n*2矩阵。你想要这个:

a = [[random.random() for i in range(n)] for j in range(n)]

相反。另请注意,如果您在python 2.7中,请将range替换为xrange,因为前者实际上会创建一个列表来迭代(浪费资源),因为后者只是迭代数字没有创建列表。

答案 2 :(得分:1)

您不需要使用随机值初始化数组,因为您要覆盖它们。 random()是一个非常耗时的功能,但对于小型数组,它是不可见的。您可以创建一个没有random()的n * n数组:

>>> a = []
>>> for i in range(n):
...    tmp = []
...    for j in range(n):
...       tmp.append(int(input("Enter the element: ")))
...    a.append(tmp)
... 
Enter the element: 1
Enter the element: 2
Enter the element: 3
Enter the element: 4
Enter the element: 5
Enter the element: 6
Enter the element: 7
Enter the element: 8
Enter the element: 9
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

此外,如果您想对每一行和每列求和,请输入以下代码:

>>> for i in a: print sum(i)  # sum of rows
... 
6
15
24
>>> for i in zip(*a): print sum(i) # sum of columns
... 
12
15
18