python-3.x - 使用列表理解的矩阵的行和、列和和对角线和。也摆脱错误:“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 - 初学者
解决方案
您在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)]
推荐阅读
- html - 如何在引导程序 4 中对齐一系列图像?
- json - 无法使用 Spring Boot 和 postgresql 获取布尔值以进行插入
- xcode - 当 isHidden == true 时 UIStackView 从左侧动画
- python - 我可以做些什么来使用 Mayavi 在我的机器上构建 3D 条形图?
- cmake - 如何使用“make”和 cmake 运行特定的单元测试
- java - 来自 I/O 误用的线程“main”java.util.NoSuchElementException 中的异常?
- linux - 使用 glob 表达式匹配两个整数
- css - 在其父级内垂直居中字形
- android - RxJava 2.x - 由 PublishSubject 触发并与其他 Observable 合并的 Observable 获取 flatMap 不会被订阅/执行
- reactjs - 将值从子组件传递给父组件