在做dp的時候遇到了乙個問題,構建n*m的二維陣列的時候。。。
# 構建dp
# 這樣構建會淺拷貝,造成!
# row = [0]*(n+1)
# dp = [row]*(m+1)
# print(dp)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
dp[1][0] = 1
print(dp)
# [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
# 而我想要的只是
# # [[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
dp = [[0 for _ in range(len(row))] for row in n] # 深拷貝構造
解答:
因為:list * n—>n shallow copies of list concatenated, n個list的淺拷貝的鏈結
# 淺拷貝
list1 = *3
print(list1) # [, , ]
# 是乙個含有乙個空列表元素的列表,所以*3表示3個指向這個空列表元素的引用,修改任何
# 乙個元素都會改變整個列表
print(list1)
# 深拷貝
lists = [ for i in range(3)]
print(lists) # [[3, 4, 5], , ]
# 構建3行4列二維陣列
mylist = [([0] * 3) for i in range(4)]
print(mylist) # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
參考:
python中陣列與多維陣列用法介紹
python中陣列與多維陣列用法介紹
如下 複製 a 0 a 1 但出果引用不存在的下標,則會引發異常。這時,你需要先新增元素,再引用就沒有問題 了。如果想預先保留空間,可以使用迴圈來給list,每個元素乙個預設值,再引用就不會有問題 了。如 這樣就生成了乙個100 100預設值為0的陣列。建立乙個寬度為3,高度為4的陣列 0,0,0 ...
多維陣列用法 陣列
idlist array 11 22 33 一維陣列 多維陣列 並把 idlist一維陣列的值賦給多維陣列 families array id idlist,name array liming wangxi yangyang age array 25 23 20 i 0 foreach famili...
多維陣列與交錯陣列
建立乙個一維陣列 int a new int 10 建立乙個二維陣列 int a new int 2,3 兩行三列的陣列 我們知道一維陣列在記憶體中是佔據乙個線性的空間。而且陣列有乙個特點,也可以說是缺點,那就是陣列一旦分配之後,長度就是確定的。對於二維陣列來說亦同,二維陣列在記憶體中佔據的,其實也...