2016-09-20 13 views
-3

私はこれらのリストがあります。追加はリスト(はIndexError:範囲外のリストインデックス)

n_crit = [[1, 2, 3, 4, 5, 6], [1, 1, 1, 1, 1, 1], [-1, 1, -1, -1, -1, 1], [2, 3, 5, 4, 1, 6], [10, 0, 0.5, 1, 0, 0], [0, 30, 5, 6, 0, 0], [0, 0, 0, 0, 0, 5]] 

crit = [[80, 90, 6, 5.4, 8, 5], [65, 58, 2, 9.7, 1, 1], [83, 60, 4, 7.2, 4, 7], [40, 80, 10, 7.5, 7, 10], [52, 72, 6, 2, 3, 8], [94, 96, 7, 3.6, 5, 6]] 

を、私はこれらのコードを持っている:

DivMatrix = [] 
for x in range(len(crit)): 
    subList1 = [] 
    for y in range(len(crit[x])): 
     subList2 = [] 
     if (n_crit[2][x]>0): 
      for z in range(len(crit[x])): 
       subList2.append(crit[y][x] - crit[z][x]) 
     elif (n_crit[2][x]<0): 
      for z in range(len(crit[x])): 
       subList2.append(-(crit[y][x] - crit[z][x])) 
     subList1.append(subList2) 
    DivMatrix.append(subList1)  

は、今、私が使用したいです

n_crit = [[1, 2, 3, 4, 5], [0.23, 0.15, 0.15, 0.215, 0.255], [-1, -1, 1, 1, 1], [2, 6, 5, 4, 1], [4000, 0, 20, 0, 0], [0, 0, 40, 2, 0], [0, 1.5, 0, 0, 0]] 

crit = [[15000, 7, 60, 3, 3], [27000, 9, 120, 7, 7], [19000, 8.5, 90, 4, 5], [36000, 10, 140, 8, 7]] 

をしかし、その代わりに、私は、このエラーメッセージが表示されます:あるリストの別のペアのために同じコード

subList2.append(-(crit[y][x] - crit[z][x])) 
IndexError: list index out of range 

私は本当に何が間違っているのか分かりませんが、私は望むリストのペアにこのコードを使用したいと思います。

+0

'len(crit)'!= 'len(n_crit)' –

+0

両方のリストの長さが異なります –

答えて

1

存在しないどうやらそれは範囲外のことで引き起こされた時点でリスト要素を参照するとき最初例えば

、リストの大きさを考える(行列の2次元としてリストを考えてみる、リストの各要素が行列の行である)

n_crit = 7x6 (6x5, if starts with 0) 
crit = 6x6 (5x5, if starts with 0) 

そして、あなたのプログラミングコードで:

x should in [0, rows of crit-1], that is [0, 5] 
y should in [0, cols of crit-1], that is [0, 5] 
z should in [0, cols of crit-1], that is [0, 5] 

だから彼らが有効であることを意味すべての

crit[y][x], crit[z][x] are in 5x5 matrix, crit itself is 5x5, 

n_crit = 7x5 (6x4, if starts with 0) 
crit = 4x5 (3x4, if starts with 0) 
x should in [0,3] 
y should in [0,4] 
z should in [0,4] 
crit[y][x], crit[z][x] are in 4x3 matrix, while crit itself is 3x4 

あなたの第二の例については

は明らかに範囲外の例外が発生します。

あなたの入力に間違いがあったと思いますが、2番目のリストの行と列を間違えましたか?

理論的には、2つの行列AとBで演算を行う場合、cols(A)=行(B)、たとえば行列乗算が であることがよくあります。入力を確認してください。

0

例外はあなたのZ値4提起されているが、n_critが4のリストであるので、インデックス4(リスト中の第5回)が

関連する問題