2013-06-28 60 views
0

我創建了一個字典,其中的條目列表如下:的Python 3:內部詞典列表,列表索引超出範圍

new_dict 
{0: ['p1', 'R', 'p2', 'S'], 1: ['p3', 'R', 'p4', 'P'], 2: ['p5', 'R', 'p6', 'S'], 3: ['p7', 'R', 'p8', 'R'], 4: ['p9', 'P', 'p10', 'S'], 5: ['p11', 'R', 'p12', 'S'], 6: ['p13', 'S', 'p14', 'S']} 

從這裏我想檢查列表裏面的元素在我的名單下面Moves。例如,在new_dict [0]中,我想檢查第一個元素和Moves中的第三個元素,如果不是,則引發類異常。 (這是代碼片段。)

class NoStrategyError(Exception): pass 

j=0 
while j < len(new_dict): 
    i = 0 
    while i < 4: 
     # Write the code for the NoSuchStratgyError 
     Moves = ['R', 'S', 'P', 'r', 's', 'p'] 
     if new_dict[j][1+4*i] not in Moves or new_dict[j][3+4*i] not in Moves: 
      raise NoStrategyError("No such strategy exists!") 
     i+=1 
    j+=1 

現在,這裏的問題是,當我運行它,我得到以下錯誤:

if new_dict[j][1+4*i] not in Moves or new_dict[j][3+4*i] not in Moves: IndexError: list index out of range

這是什麼意思?

有沒有更好的方法來編寫內部while loop?並將其改爲for loop?例如,for elem in new_dict[j]

+0

你的列表有一個最大4個元素,但'1 + 4 * i'從1到13. – Blender

+0

我剛剛意識到它。我不需要那個內部的'while循環'。唷! –

+0

另外,你爲什麼使用連續的整數鍵代替列表的字典? – Blender

回答

1

請注意,在你的嵌套循環的第一互爲作用,我們看到,在移到都是以下值:

>>>new_dict[0][1], new_dict[0][3] 
('R', 'S') 

然而,在嵌套循環的第二次迭代,你正試圖評估條款未包含在字典中:

>>>new_dict[1][5], new_dict[1][7] 
IndexError: list index out of range 

注意new_dict [1]僅具有4個要素:

>>>new_dict[1] 
['p3', 'R', 'p4', 'P'] 

所以,你只能引用new_dict [1] [0],new_dict [1] [1],new_dict [1] [2],new_dict [1] [3]:

>>>new_dict[1][0],new_dict[1][1],new_dict[1][2],new_dict[1][3] 
('p3', 'R', 'p4', 'P')