3

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

def sumColumn(matrix, columnIndex) 

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

为第 0 行输入一个 3×4 矩阵行:2.5 3 4 1.5 为第 1 行输入一个 3×4 矩阵行: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

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

4

2 回答 2

1

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

一个要求输入的简短示例,通过空格将其拆分并使其成为float

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

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

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

于 2013-01-18T04:45:13.873 回答
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(...) 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(...) map(function, sequence[, sequence, ...]) -> 列表

Return a list of the results of applying the function to the items of
the argument sequence(s). ...
于 2013-01-18T04:55:42.150 回答