python對二維數(shù)組賦值問題
python對二維數(shù)組賦值
最近做力扣遇到一個問題,
obstacleGrid=[[0],[1]] m = len(obstacleGrid) n = len(obstacleGrid[0]) # 需要考慮m=1 n=1 dp = [[0] * n] * m
但是當(dāng)寫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ù)字,每個之間空格隔開,回車?yán)^續(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)建方式導(dǎo)致了[[]]*4表示的是4個同時指向一個列表的引用,也就是4行都指向的是同一個列表,改變?nèi)我庖粋€都會改變每一行的當(dāng)列數(shù)據(jù)。
避免淺拷貝的創(chuàng)建方式
可以知道,上圖的兩種創(chuàng)建方式都可以避免淺拷貝,總結(jié)來說只要對于行不要使用*M這種寫法,都可以避免。
第一種創(chuàng)建方式可以在創(chuàng)建時就固定二維列表的行和列。
第二種創(chuàng)建方式可以初始只能固定行數(shù),每一行的數(shù)據(jù)可以在后續(xù)append進去。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django 用戶登陸訪問限制實例 @login_required
這篇文章主要介紹了Django 用戶登陸訪問限制實例 @login_required,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python自動化腳本安裝指定版本python環(huán)境詳解
這篇文章主要為大家詳細(xì)介紹了python自動化腳本安裝指定版本python環(huán)境的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09python利用beautifulSoup實現(xiàn)爬蟲
這篇文章主要介紹了python利用beautifulSoup實現(xiàn)爬蟲,需要的朋友可以參考下2014-09-09Python基礎(chǔ)第三方模塊requests openpyxl
這篇文章主要為大家介紹了Python基礎(chǔ)第三方模塊requests openpyxl使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11PyCharm2019.3永久激活破解詳細(xì)圖文教程,親測可用(不定期更新)
這篇文章主要介紹了PyCharm2019.3最新激活碼(注冊碼)破解永久版詳細(xì)圖文教程的相關(guān)資料,親測可用,需要的朋友可以參考下2020-10-10