Python多維陣列定義
阿新 • • 發佈:2019-01-26
剛開始學習Python語法,還是習慣去oj刷題,遇到問題再去解決比較深刻。h
下面這個題主要學習了函式和陣列的定義。
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2176.html
先說下,Python的迴圈
range()函式,建立一個整數列表
for i in range(10):
sum+=i;
一個簡單的遞迴題目,要邊遞迴邊存,不然會出現超時。
#coding=utf-8
def getValue(a,b,c):
if x[a][b][c]<>-1:
print("("+str(a)+","+str(b)+","+str(c)+")="+str(x[a][b][c]));
return x[a][b][c];
elif a<=0 or b<=0 or c<=0 :
x[a][b][c]=1;
return 1;
elif a>20 or b>20 or c>20 :
print("===");
x[a][b][c] = getValue(20, 20, 20);
return x[a][b][c];
elif a<b and b<c :
x[a][b][c]=getValue(a,b,c-1)+getValue(a,b-1,c-1)-getValue(a,b-1,c);
return x[a][b][c];
else:
x[a][b][c] = getValue(a - 1, b, c) + getValue(a - 1, b - 1, c) + getValue(a - 1, b, c - 1) - getValue(a - 1, b - 1, c - 1);
return x[a][b][c];
x=[[[-1]*40]*40]*40;
while True:
a=map(int,raw_input().split());
print(a[0] if a[0]>0 else 0,a[1] if a[1]>0 else 0,a[2] if a[2]>0 else 0);
print(getValue(a[0] if a[0]>0 else 0,a[1] if a[1]>0 else 0,a[2] if a[2]>0 else 0));
print(x);
以上的程式碼是WA的。
問題在多維陣列的定義。這個是陣列的淺拷貝,一個值改變後其他的複製的值也會改變。
改成下面這種定義就可以了。
當然還有匯入NumPy資料庫的方式,裡面有很多的函式可以直接呼叫。x=[[[-1 for i in range(30)] for i in range(30)] for i in range(30)];