Python中range与len在for循环中的用法及代码逻辑解析咨询
这段Python代码的运行逻辑及
range()/len()用法解析 先补全可运行的完整代码(原代码缺少函数定义部分):
def sum_above_diagonal(m): sum = 0 # 初始化总和为0 for i in range(len(m)): for j in range(len(m[i])): if i <= j: sum = sum + m[i][j] return sum print(sum_above_diagonal([[6, 2, 0, 6, 1], [6, 8, 2, 5, 8], [0, 6, 3, 2, 3]]))
一、整体功能
这段代码定义了一个函数,接收二维列表(矩阵)作为输入,计算并返回主对角线(行索引等于列索引的位置)及对角线以上区域的所有元素之和。
二、逐行拆解运行逻辑
初始化累加变量
sum = 0:先把用来存结果的sum设为0,避免后续累加出错。外层循环:遍历每一行
for i in range(len(m)):
len(m):计算输入矩阵的行数,示例里的矩阵有3行,所以返回3。range(3):生成0、1、2这三个整数(Python索引从0开始),对应矩阵的行索引。外层循环会依次让i取这三个值,逐个处理每一行。
- 内层循环:遍历当前行的每一列
for j in range(len(m[i])):
m[i]是当前遍历到的行(比如i=0时,就是第一行[6,2,0,6,1]),len(m[i])算出该行的列数,示例里每行有5列,返回5。range(5)生成0、1、2、3、4这几个列索引,内层循环让j依次取这些值,遍历当前行的每个元素。
筛选目标区域元素
if i <= j:主对角线的位置是i == j,i < j是对角线以上的区域(比如第0行所有列都符合,第1行从第2列开始符合),只有满足这个条件的元素才会被累加。累加元素
sum = sum + m[i][j]:把符合条件的元素值加到sum里,逐步累积总和。返回结果
return sum:所有循环结束后,返回最终的累加结果,最后print函数把结果输出。
三、range()和len()在for循环中的配合用法
遍历列表(尤其是二维列表)时,这两个函数常搭配使用:
len()用来获取列表的长度(元素个数),比如一维列表lst的长度是len(lst),二维列表m的行数是len(m),某一行的列数是len(m[i])。range()根据长度生成对应的索引序列,比如range(n)会生成从0到n-1的整数,刚好对应列表的所有索引。- 这样就能通过索引
i、j精准访问列表中的每个元素,实现对整个列表的遍历。
四、示例输入的计算结果
示例输入的矩阵:
行0:6 2 0 6 1 行1:6 8 2 5 8 行2:0 6 3 2 3
需要累加的元素:
- 行0:全部元素 → 6+2+0+6+1=15
- 行1:第2到第5列元素 →8+2+5+8=23
- 行2:第3到第5列元素 →3+2+3=8
总和:15+23+8=46,所以最终print输出46。
内容的提问来源于stack exchange,提问作者raven kumar
相关产品推荐
相关产品推荐

