1. 程式人生 > >Python多維陣列定義

Python多維陣列定義

剛開始學習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的。

問題在多維陣列的定義。這個是陣列的淺拷貝,一個值改變後其他的複製的值也會改變。

改成下面這種定義就可以了。

x=[[[-1 for i in range(30)] for i in range(30)] for i in range(30)];
當然還有匯入NumPy資料庫的方式,裡面有很多的函式可以直接呼叫。