2016-06-27 12 views
0
sumc=0 
t = int(input()) 
while t : 
    x = input().split() 
    n = int(x[0]) 
    k = int(x[1]) 
    e = int(x[2]) 
    m = int(x[3]) 
    suma = [0]*(n-1) 
    Matrix = [] 
    for i in range(n-1): 
     Matrix.append([]) 
     for j in range(e): 
      p = int(input()) 
      Matrix[i].append(p) 
    for i in range(n-1): 
     for j in range(e): 
      suma[i] = suma[i] + Matrix[i][j] 
    for j in range(e): 
     p = int(input()) 
     Matrix[n-1][j].append(p) 
    suma.sort(suma,suma+(n-1)) 
    for j in range(e-1): 
     sumc = sumc + Matrix[n-1][j] 
    for z in range(m+1): 
     if(suma[k-1] < sumc+z): 
      break 
    if (z==m+1): 
     print("imposible") 
    else: 
     arr[n-1][e-1] = z 
     print(arr[n-1][e-1]) 
    t-=1 

私は1つのパラメータ/行/列(ここでは行21で表される行)を一定に保って配列にアクセスしたいと考えています。しかし、エラー "範囲外のインデックス"を取得します。 一般に、パラメータの1つが定数であるようなタイプの問題の配列にアクセスする方法。Pythonで多次元行列にアクセスする

for i in range(n-1): 
    Matrix.append([]) 
    for j in range(e): 
     p = int(input()) 
     Matrix[i].append(p) 

Matrixからn-1の要素を追加します。

Traceback (most recent call last): 
    File "C:/Users/User/untitled/cde_chf_entexam.py", line 21, in <module> 
    Matrix[n-1][j].append(p) 
IndexError: list index out of range 

Process finished with exit code 1 

はJUSTエラーのLI​​NE 20-21を参照して、コード全体は、ITが

答えて

1

あなたのループを助けるかもしれない場合は、投稿さですが、必要はありません。 Pythonは0でインデックス付けされているため、Matrixの中で最も高いインデックスはn-2です。

あなたは:n-1が最高の割出し場所(n-2)より1高いのでMatrix[n-1][j].append(p)、表現Matrix[n-1]IndexErrorで失敗します。余談として


、リストのリストは、純粋なPythonで行列を格納するための有効なデータ構造がありますが、で動作するように行列が容易に作ることに専念サードパーティのライブラリがあります。この分野の事実上の標準はnumpyです。

関連する問題