2017-02-27 22 views
0

我明白這個錯誤意味着什麼,但有人可以解釋我在做這個特定的代碼有什麼問題嗎?基本上,路徑= [A,B,C,D],我只是創建[4] [4](最終)二維數組,它交換了相鄰的索引。交換從最後一個元素和之前的元素開始,隨着循環的進行到達列表的開始處。所以最後我應該得到[[A,B,D,C] [A,C,B,D],[B,A,C,D],[D,B,C,A]列表索引超出範圍,我看不到

t = -1 
    s = 1 
    y = [] 
    final = [] 
    path = self.path #path = [A,B,C,D] 
    for x in path: 
     y.append(path) 
     if s < 4:  #Just ensuring to not get out of range 
      y[-s],y[-s-1] = y[-s-1],y[-s] 
     else: 
      y[-1],y[0] = y[0],y[-1] 
     final.append(y) 
     y = []   # So I won't create multi-dimensional list 

錯誤:列表索引超出範圍

+0

,'-s-1'是-4。 'y [-4]'是超出界限的。 – Maroun

+0

當len(y)== 1時'y [-s-1]'求值爲'y [-2]',這已經是第一次迭代了,所以索引超出範圍。 –

+0

't'永遠不會被使用,'s'總是1但是有一個'if s <4','y'被創建爲空,然後添加1個元素,然後當它試圖交換2個元素時只有1 ...我建議完全重寫這個,「不必要的複雜」幾乎甚至開始形容它。 –

回答

1

這裏的一個代碼段,工程和是可讀的:當`S = 3`

path= ['A','B','C','D'] 

final= [] 
for index in range(len(path)): 
    row= path[:] # copy the original list 
    row[index-1],row[index]= row[index],row[index-1] # swap 2 elements 
    final.insert(0, row) # insert at the start so the order is as expected 

print(final) 
+0

謝謝你,像一個魅力工作。我完全忘記了順序無關緊要,所以它是一段非常漂亮的代碼,儘管它很簡單:) –

0

因爲在這裏你y變得[[A, B, C, D]][A, B, C, D]。所以它只有一個元素。