创建一个3乘4矩阵并添加列

时间:2013-01-18 04:29:14

标签: python

  

在本实验中,您将使用Python中的二维列表。做   以下内容:编写一个函数,返回所有的总和   使用以下标题在矩阵中指定列中的元素:

def sumColumn(matrix, columnIndex) 
     

编写一个函数,逐行显示矩阵中的元素,每行中的值为   显示在单独的一行(见下面的输出)。写一个测试   程序(即主函数)读取3×4矩阵并显示   每列的总和。这是一个示例运行:

     

为第0行输入3乘4矩阵行:2.5 3 4 1.5输入3乘4矩阵   第1行的行:1.5 4 2 7.5为第2行输入3乘4的矩阵行:3.5 1   1 2.5

     

矩阵是   2.5 3.0 4.0 1.5   1.5 4.0 2.0 7.5   3.5 1.0 1.0 2.5

     

第0列的元素总和为7.5第1列的元素总和为   8.0第2列的元素总和为7.0第3列的元素总和为11.5

到目前为止,这是我的代码:

def main():
    matrix = [[],[],[]]
    matrix[0].append(raw_input('Enter a 3-by-4 matrix row for row 0:'))
    matrix[1].append(raw_input('Enter a 3-by-4 matrix row for row 1:'))
    matrix[2].append(raw_input('Enter a 3-by-4 matrix row for row 2:'))
    print 'The matrix is:', '\n', matrix[0], '\n', matrix[1], '\n', matrix[2], '\n',   

main()    

我需要帮助将列添加到一起,我可能错误地创建了矩阵 我一直在使用sum = matrix[0][0][0] + matrix[0][0][2] 但它确实添加它们只是将两个数字放在一起 例如:我想要1 + 2
预期答案3
出来12

有没有办法可以将列表的两个元素一起添加?

2 个答案:

答案 0 :(得分:1)

raw_input返回一个字符串,因此需要将其处理为某种形式的数字。

一个要求输入的简短示例,通过空格分割它并使它们成为float

text = raw_input('row 1: ')
nums = [float(word) for word in text.split()]

此外,您不希望附加到matrix = [[],[],[]] - 因为您最终会创建实际上是三维结构的内容。将其更改为matrix = [] ...并在每次输入输入行时使用matrix.append(nums)

您可能还想考虑输入无效数字后会发生什么,或者如果没有所需数量的话......但这是一个不同的问题。

答案 1 :(得分:1)

def main():
    f = lambda x: map(float, raw_input('Enter row %d for matrix of 3X4.\n' %(x)).split())
    matrix = [f(0),f(1),f(2)]
    print map(sum, zip(*matrix))

main()

上面的代码采用3X4矩阵作为输入,并在每列上打印总和。

说明:

如果lambda听起来令人生畏,你可以改用一个函数,比如说:

def rowInput(x):
 return map(float, raw_input('Enter row %d for matrix of 3X4.\n' %(x)).split())

并将其称为

matrix = [rowInput(0), rowInput(1), rowInput(2)]

这里的zip函数一次从每一行中获取一个元素,并将它们相加。

  

拉​​链(...)       zip(seq1 [,seq2 [...]]) - > [(seq1 [0],seq2 [0] ...),(...)]

Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences. ...

zip(*matrix)将返回[(col0), (col1), (col2), (col3)]


map函数将第一个参数中的函数应用于第二个参数中的每个元素。例如,map(sum, zip(*matrix))相当于[sum(col0), sum(col1), sum(col2), sum(col3)]

  

地图(...)       map(function,sequence [,sequence,...]) - >列表

Return a list of the results of applying the function to the items of
the argument sequence(s). ...