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:"))
sumr=0
sumc=0
for i in range(0,n):
sumr+=a[i]
for j in range(0,n):
for i in range(0,n):
sumc+=a[j][i]
此程序显示属性错误,该列表无法添加到int项目中。 帮我纠正它。 还建议进行更正
答案 0 :(得分:4)
a[i]
是一个列表(代表代码中的一行)。
您无法添加列表和int
,您应该:
sumr += sum(a[i])
sum
会将a[i]
列表中的元素总和作为int
返回,现在您的计算结果正常。
答案 1 :(得分:2)
而不是
for i in range(0,n):
sumr+=a[i]
简单写一下
sumr = sum(a[i] for i in range(0, n))
a[i]
是一个列表。您无法直接向int
添加列表,即使它是int
的列表。相反,您可以将sum()
list
int
int
添加到{{1}}。
答案 2 :(得分:2)
$ python test.py
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Traceback (most recent call last):
File "test.py", line 209, in <module>
a[i][j]=int(input("Enter the element:"))
IndexError: list index out of range
您的代码适用于2 * 2矩阵,因为您只有两行。
a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
以下是3 * 3矩阵的输出: -
[[0.9632434262652646, 0.7470504655963679, 0.2750109619917276], [0.7032133906246875, 0.16200573351318048, 0.09565026547688305]]
克服上述问题,请参阅以下代码: ALGO /步骤:
代码:
n = int(raw_input("Enter the limit of your matrix:"))
a = []
tmp = [0 for k in range(n)]
for i in range(0,n):
a.append(list(tmp))
for j in range(0,n):
a[i][j] = int(input("Enter the element:"))
sumr = sum(map(lambda x:sum(x), a))
sumc = 0
for j in range(0,n):
sumc +=sum(map(lambda x:x[j], a))
print sumr
print sumc
输出:
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
18
18
答案 3 :(得分:0)
&GT;
n = int(raw_input("Enter the limit of your matrix:"))
a = []
tmp = [0 for k in range(n)]
for i in range(0,n):
a.append(list(tmp))
for j in range(0,n):
a[i][j] = int(input("Enter the element:"))
sumr = sum(map(lambda x:sum(x), a))
sumc = 0
for j in range(0,n):
sumc +=sum(map(lambda x:x[j], a))
print sumr
print sumc
输出: -
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:3
18
18
答案 4 :(得分:0)
我对你的问题做了一些假设,这是一个在输入元素后打印行和列总和的解决方案。此外,您一直在尝试将列表添加到整数,这导致了该错误。
请注意,我们不需要random()
来初始化列表,因此我已将其替换。我稍微重构了你的代码并编写了有用的评论。
n = input("Enter the limit of your matrix:") # no need to cast input to int
a = [[0 for x in xrange(n)] for x in xrange(n)]
for i in xrange(n): # range(n) or xrange(n) start from 0 by default
for j in xrange(n):
a[i][j]=int(input("Enter the element:"))
sumr = []
sumc = [0 for x in xrange(n)]
for i in xrange(n):
sumr.append(sum(a[i]))
for j in xrange(n):
sumc[j] += a[i][j]
print "sum of rows: ", sumr
print "sum of columns", sumc
这适用于任何索引。另外,代码中的sumr
和sumc
,如果它们与我猜的相同,那么最终会得到相同的值,但这里有所不同。
以下是一个例子:
~ python test.py
Enter the limit of your matrix:3
Enter the element:1
Enter the element:2
Enter the element:3
Enter the element:1
Enter the element:2
Enter the element:4
Enter the element:1
Enter the element:5
Enter the element:6
sum of rows: [6, 7, 12]
sum of columns [3, 9, 13]
此外,请参阅此链接以获取有关how to initialize multi-dimensional lists的更多信息,以及有关difference between xrange and range的一些信息,尽管在此示例中它不会产生太大影响。
答案 5 :(得分:0)
第3行和第6行中的代码存在冲突(直观)。
a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
不会在每个列表中创建包含n个元素的n个列表(我在这里猜测,看起来就像你需要的那样)这一个做到了:
a=[[random.random() for i in range(n)] for j in range(n)]]
导致错误的部分是:
sumr=0
sumc=0
for i in range(0,n):
sumr+=a[i]
sumr
属于<type 'int'>
,但a[i]
是len = n
的列表,+=
运算符会在那里引发错误。
如果您想要行总和,可以尝试:
sumr = [sum(row) for row in a] # sum of rows
sumc = [sum(col) for col in zip(*a)] # sum of columns
对于更简单的代码,您必须使用numpy.array和numpy.sum
a = numpy.array(a)
sumr = numpy.sum(a, 1)
sumc = numpy.sum(a, 0)