python对二维数组赋值问题
python对二维数组赋值
最近做力扣遇到一个问题,
obstacleGrid=[[0],[1]] m = len(obstacleGrid) n = len(obstacleGrid[0]) # 需要考虑m=1 n=1 dp = [[0] * n] * m
但是当写dp[0][0]=1时,dp[1][0]也会自动变1,理由
定义的时候dp的m行是同一个[0]*n的索引,所以一个被改变,其他的都被改变。
靠谱点的初始化方式
dp = [[0 for _ in range(n)] for _ in range(m)]
或者深拷贝
import copy dp = [] a = [0]*n for i in range(m): dp.append(copy.deepcopy(a))
python创建二维数组的不同方式以及整列赋值的问题
会出现整列赋值的创建方式
在C中输入二维数组形式非常熟悉(采用codeblocks):输入一行的数字,每个之间空格隔开,回车继续输下一行
在python中采用同样的形式输入(采用PyCharm):
代码如下:
输入:
其中输入3->回车,输入4->回车,表示构建了一个A[4][3]的矩阵。
输入1 2 3->回车,输入4 5 6->回车,输入7 8 9->回车,输入0 1 2->回车
输出:
这样创建二维列表在后续的使用中遇到了问题。
比如我的本意是把第二行第二个元素赋值为1,而输出如下
他将我每一行的第二列都赋值为了1,原因是因为我的二维列表创建方式导致了[[]]*4表示的是4个同时指向一个列表的引用,也就是4行都指向的是同一个列表,改变任意一个都会改变每一行的当列数据。
避免浅拷贝的创建方式
可以知道,上图的两种创建方式都可以避免浅拷贝,总结来说只要对于行不要使用*M这种写法,都可以避免。
第一种创建方式可以在创建时就固定二维列表的行和列。
第二种创建方式可以初始只能固定行数,每一行的数据可以在后续append进去。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
今天小编就为大家分享一篇python 解决动态的定义变量名,并给其赋值的方法(大数据处理),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-11-11Python 中的 Counter 模块及使用详解(搞定重复计数)
Counter 是一个简单的计数器,用于统计某些可哈希对象的数量。它以字典的形式存储元素和它们的计数,这篇文章主要介绍了Python 中的 Counter 模块及使用详解(搞定重复计数),需要的朋友可以参考下2023-04-04python中np.random.permutation函数实例详解
np.random.permutation是numpy中的一个函数,它可以将一个数组中的元素随机打乱,返回一个打乱后的新数组,下面这篇文章主要给大家介绍了关于python中np.random.permutation函数的相关资料,需要的朋友可以参考下2023-04-04
最新评论