You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按指定规则构造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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:46