在本实验中,您将使用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
有没有办法可以将列表的两个元素一起添加?
答案 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). ...