在刷題的過程中,利用如下的**(列表乘法)建立二維0陣列,但在修改某一維中某個元素的時候,對應位置的其他維度也會隨之改變,檢查了**之後確保無誤後,搜了下原因,參考部落格
dp =[[
0]*len
(a)]*(
len(a)//2
)
原因是:以上的建立矩陣的方式其實先是建立了乙個list,例:arr
ay=[
0,0]
∗2
array = [0,0]*2
array=
[0,0
]∗2則是建立了len
(a
)len(a)
len(a)
個[0]的引用,因此改變arr
ay[0
][0]
=1
array[0][0]=1
array[
0][0
]=1時,其實是改變了被引用的lis
t[0,
0]
list[0,0]
list[0
,0],所以每一維度的元素都會隨之改變,得到arr
ay=[
[1,0
],[1
,0]]
array=[[1,0],[1,0]]
array=
[[1,
0],[
1,0]
]。為了避免這個問題可採用python的列表生成式和numpy的方式進行陣列的建立。
生成( le
n(a)
//2,
len(
a)
)(len(a)//2, len(a))
(len(a
)//2
,len
(a))
維的二維陣列:
import numpy as np
dp =[[
0for i in
range
(len
(a))
]for j in
range
(len
(a)//2)
]# 列表生成式
dp = np.zeros(
(len
(a)//2,
len(a)
), dtype=np.
int)
# numpy
Ruby建立陣列方法總結
程式經常需要管理變數集合。例如,管理日曆的程式必須有一周的天數列表。每天必須儲存在乙個變數中,它們的列表可以儲存在乙個陣列變數中。通過這個陣列變數,您可以訪問每一天。建立空陣列 您可以通過建立乙個新的陣列物件並將其儲存在乙個變數中來建立乙個空陣列。這個陣列將為空 您必須用其他變數填充它才能使用它。如...
python的numpy模組建立陣列方法大全
arr numpy.array 1,2,3 4,5,6 生成乙個兩行三列的陣列 1,2,3 4,5,6 arr numpy.arange 1,6,1 引數是開始位置 包含 結束位置 不包含 步長 生成的陣列元素從1到6,步長為1arr numpy.linspace 0,6,12 引數是開始位置 包含...
python list與numpy陣列效率比較
因為經常一訓練就是很多次迭代,所以找到效率比較高的操作能大大縮短執行時間,但這方面資料不足,所以自己記錄總結一下,有需要再補充 有時候我需要乙個陣列,然後可能會頻繁從中索引資料,那麼我選擇list還是numpy array呢,這裡做了乙個簡單的實驗進行比較,環境python 3.6 import r...