python對二維數(shù)組賦值問題
python對二維數(shù)組賦值
最近做力扣遇到一個問題,
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創(chuàng)建二維數(shù)組的不同方式以及整列賦值的問題
會出現(xiàn)整列賦值的創(chuàng)建方式
在C中輸入二維數(shù)組形式非常熟悉(采用codeblocks):輸入一行的數(shù)字,每個之間空格隔開,回車繼續(xù)輸下一行
在python中采用同樣的形式輸入(采用PyCharm):
代碼如下:

輸入:

其中輸入3->回車,輸入4->回車,表示構(gòu)建了一個A[4][3]的矩陣。
輸入1 2 3->回車,輸入4 5 6->回車,輸入7 8 9->回車,輸入0 1 2->回車
輸出:

這樣創(chuàng)建二維列表在后續(xù)的使用中遇到了問題。
比如我的本意是把第二行第二個元素賦值為1,而輸出如下


他將我每一行的第二列都賦值為了1,原因是因為我的二維列表創(chuàng)建方式導致了[[]]*4表示的是4個同時指向一個列表的引用,也就是4行都指向的是同一個列表,改變?nèi)我庖粋€都會改變每一行的當列數(shù)據(jù)。
避免淺拷貝的創(chuàng)建方式


可以知道,上圖的兩種創(chuàng)建方式都可以避免淺拷貝,總結(jié)來說只要對于行不要使用*M這種寫法,都可以避免。
第一種創(chuàng)建方式可以在創(chuàng)建時就固定二維列表的行和列。
第二種創(chuàng)建方式可以初始只能固定行數(shù),每一行的數(shù)據(jù)可以在后續(xù)append進去。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python自動化測試三部曲之unittest框架的實現(xiàn)
這篇文章主要介紹了python自動化測試三部曲之unittest框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法
這篇文章主要介紹了python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法,主要涉及了pefile模塊的用法,需要的朋友可以參考下2014-10-10
Python調(diào)用百度AI實現(xiàn)圖片上文字識別功能實例
百度AI功能還是很強大的,百度AI開放平臺真的是測試接口的天堂,免費接口很多,當然有量的限制,但個人使用是完全夠用的,下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用百度AI實現(xiàn)圖片上文字識別功能的相關(guān)資料,需要的朋友可以參考下2021-09-09
關(guān)于Django使用 django-celery-beat動態(tài)添加定時任務(wù)的方法
本文給大家介紹Django使用 django-celery-beat動態(tài)添加定時任務(wù)的方法,安裝對應的是celery版本,文中給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-10-10

