今天在刷leetcode05的时候,对照着别人运行正常的代码,代码翻来覆去敲了N遍,逻辑捋了N遍,都是一致的,但结果就是不正确。根据结果倒推print出来了错误输出的地方,但还是搞不清为什么会出错。
最后完全复制了一遍,自己改一行,测一次。终于发现,确实不是逻辑问题,而是二维数组初始化的问题。
二维数组初始化的时候,赋值语句有问题。
我用的代码是:
1:dp = [[False]*size] *size
正确输出用的代码是:
2: dp = [[False for _ in range(size)] for _ in range(size)]
对比发现,1的语句无法正确赋值,而2可以:
比如:
size = 2
dp1 = [[False]*size] *size
dp2 = [[False for _ in range(size)] for _ in range(size)]
print(dp1)
print(dp2)
#两者此时的输出结果看起来一样: [[False, False], [False, False]]
dp1[0][1]=True
dp2[0][1]=True
print(dp1)
#dp1 输出为 [[False, True], [False, True]]
print(dp2)
#dp2 输出为 [[False, True], [False, False]]
可以看到for in range 方法生成的二维数组赋值结果是正确的,直接乘出来的数组,赋值时,不是期待的结果。
python中二维数组
查了一下,python中二维数组广泛使用的方法,除了上面的1,2之外就是使用numpy库的函数:
numpy是数值计算,在本题中,可以将false设为0 ,True设为1,其余代码可以不变:
import numpy as np
dp =

本文通过一个实际的LeetCode问题探讨了Python中二维数组初始化的常见错误。作者在尝试解决最长回文子串问题时,遇到了因二维数组初始化方式不当导致的逻辑错误。通过对比两种初始化方法——使用`for`循环和直接乘法操作,揭示了直接乘法初始化可能导致的赋值问题,并给出了使用`numpy`库的解决方案。文章强调了在Python中正确初始化二维数组的重要性,以及在数值计算场景下`numpy`库的高效应用。
最低0.47元/天 解锁文章
4291





