首页 > 解决方案 > 使用列表理解的矩阵的行和、列和和对角线和。也摆脱错误:“TypeError:'int'对象不可迭代”

问题描述

我想使用列表理解来做列总和。下面是我的代码和相应的错误。如果有人可以帮助我缓解这个问题,那就太好了。我只想使用列表理解,不想使用'zip'功能。

代码:

from pprint import pprint
from random import randint
r=int(input('Enter number of rows   :'))
c=int(input('Enter number of columns:'))
l=[[randint(1,50) for i in range(r)] for j in range(c)]
print('The 2D Matrix is: ')
pprint(l)
lr_sum = [sum(l[i]) for i in range(r)] 
print('Row Sum:    ', lr_sum)
lc_sum=[[sum(l[j][i]) for i in range(r)] for j in range(c)]
print('Column sum: ', lc_sum)

输出:

Enter number of rows   :5
Enter number of columns:5
The 2D Matrix is: 
[[27, 3, 1, 28, 9],
 [18, 20, 9, 50, 48],
 [2, 44, 45, 14, 39],
 [48, 12, 2, 38, 39],
 [2, 37, 46, 26, 23]]
Row Sum:     [68, 145, 144, 139, 134]

Traceback (most recent call last):
  File "19.py", line 10, in <module>
    lc_sum=[[sum(l[j][i]) for i in range(r)] for j in range(c)]
  File "19.py", line 10, in <listcomp>
    lc_sum=[[sum(l[j][i]) for i in range(r)] for j in range(c)]
  File "19.py", line 10, in <listcomp>
    lc_sum=[[sum(l[j][i]) for i in range(r)] for j in range(c)]
TypeError: 'int' object is not iterable

谢谢, Sudip Ray Python - 初学者

标签: python-3.xfor-loopmatrixsumlist-comprehension

解决方案


您在lc_sum定义中犯了一个简单的错误。l[j][i]指矩阵的单个(整数)值。您不能对单个值求和。自己尝试一下。例如sum(1)提出相同的TypeError: 'int' object is not iterable

为了使您的代码正常工作,您需要对整个嵌套列表理解求和:

from pprint import pprint
from random import randint


r = int(input('Enter number of rows   :'))
c = int(input('Enter number of columns:'))
l = [[randint(1, 50) for i in range(r)] for j in range(c)]
print('The 2D Matrix is: ')
pprint(l)
lr_sum = [sum(l[i]) for i in range(r)] 
print('Row Sum:    ', lr_sum)
lc_sum = [sum([l[j][i] for i in range(r)]) for j in range(c)]
print('Column sum: ', lc_sum)

但是请注意,这不是计算列总和的正确方法。为了正确计算,您还需要交换列表推导:

lc_sum = [sum([l[j][i] for j in range(c)]) for i in range(r)]

推荐阅读