不使用Numpy在Python中创建单位矩阵的问题求助
问题分析与解决方法
你的核心问题在于Python中列表是引用类型,你创建矩阵时多次将同一个列表b添加到Q中,导致Q里的每一行其实都是指向同一个列表对象的引用——修改任意一行的元素,所有行都会跟着变化。
原代码错误原因
比如你最初的代码:
Q = [] b = [] row = 2 col = 2 for i in range(row): b.append(0) for j in range(row): Q.append(b) # 这里添加的都是同一个b的引用
此时Q的两个元素都指向b,当你执行Q[n][n] = 1时,本质是在修改b的元素,最终所有行都会同步变化,才会出现[[1,1],[1,1]]的结果。
正确实现方式
方法1:循环创建独立行列表
每次循环都生成一个新的全零列表,避免引用同一对象:
row = 2 col = 2 Q = [] # 先创建全零矩阵 for i in range(row): new_row = [0] * col # 每次生成新列表 Q.append(new_row) # 设置对角元素为1 for n in range(min(row, col)): Q[n][n] = 1
方法2:嵌套循环直接构建
在构建每一行时直接判断是否为对角元素:
row = 2 col = 2 Q = [] for m in range(row): current_row = [] for n in range(col): current_row.append(1 if m == n else 0) Q.append(current_row)
方法3:列表推导式(简洁写法)
用Python特有的列表推导式一行完成:
row = 2 col = 2 Q = [[1 if i == j else 0 for j in range(col)] for i in range(row)]
以上三种方法都能正确生成单位矩阵,你可以根据作业要求选择合适的写法。
内容的提问来源于stack exchange,提问作者asanford
相关产品推荐
相关产品推荐

