按指定规则构造n阶二元矩阵:Python代码逻辑错误排查
问题分析与修正
你的代码存在两个关键逻辑错误,导致无法生成正确的二元矩阵,下面逐一拆解:
1. 矩阵初始化的引用陷阱
你用A=[[0]*4]*4初始化矩阵,这里的*操作符会创建对同一个子列表的多次引用,而不是生成4个独立的子列表。也就是说,当你修改A[i][j]时,所有行的第j列都会被修改,因为它们指向同一个底层列表。
正确的初始化方式:
用列表推导式生成独立的行:
A = [[0]*4 for _ in range(4)]
这样每一行都是全新的列表,修改某一行不会影响其他行。
2. 条件判断的优先级错误
你的判断条件if (i,j) or (j,i) in L:存在运算优先级问题:Python中in的优先级高于or,所以这个表达式会被解析为if (i,j) or ((j,i) in L):。而非空元组在布尔判断中永远为True,所以不管(j,i)是否在L里,这个条件都会成立,最终整个矩阵都会被设为1。
正确的条件写法:
明确判断两个元组是否有一个存在于L中:
if (i,j) in L or (j,i) in L:
修正后的完整代码
L = [(2,3),(0,1),(1,3),(2,0),(0,3)] # 用列表推导式初始化独立的行 A = [[0]*4 for _ in range(4)] for i in range(4): for j in range(4): # 正确的条件判断逻辑 if (i,j) in L or (j,i) in L: A[i][j] = 1 else: A[i][j] = 0 print(A)
运行这段代码会得到正确的矩阵:
[[0, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 0]]
内容的提问来源于stack exchange,提问作者Primo Raj
相关产品推荐
相关产品推荐

