鱼C论坛

 找回密码
 立即注册
查看: 4562|回复: 1

[已解决]这个代码实现这个目的为什么不对

[复制链接]
发表于 2023-11-8 19:51:52 | 显示全部楼层    本楼为最佳答案   
这段代码的目的是对给定的矩阵进行增量操作,对indices数组中指定的位置进行操作,将该位置所在行和列的所有单元格的值加1。

然而,这段代码实现的方式是有问题的。问题出在对二维数组ju的初始化上。在这段代码中,使用了如下的方式初始化二维数组ju:

ju = [[0]*n]*m

这种方式会导致ju矩阵中的每一行其实都是同一个列表对象的引用。也就是说,当对ju[ i][j]进行修改时,实际上会同时修改所有行的第j列的值。

这是因为使用[0]*n创建的列表是可变的,当将其复制给m个元素时,实际上是将同一个列表对象的引用复制了m次。所以,当对其中一个引用进行修改时,其他引用也会受到影响。

为了解决这个问题,我们可以使用列表推导式来正确初始化ju矩阵,如下所示:

ju = [[0 for _ in range(n)] for _ in range(m)]

这种方式会创建m个独立的列表对象,每个列表对象都有自己的内存空间,互相之间不会相互影响。

修复了初始化问题后,这段代码就能正确地对矩阵进行增量操作了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表