2014-01-24 52 views
-3

我試圖運行PHP相同的代碼,但它工作得很好,當嘗試在Python的運行它給我以下錯誤:無法解析錯誤:列表索引超出範圍

if my_queue[int_neighbour]['visited'] == '0': 
    IndexError: list index out of range 

輸入:

1 0 A 2,3 
2 0 B 1,4,5 
3 0 C 1,2 
4 0 D 2,5 
5 0 E 2,4 

全碼:

import string 
import time 
start_time = time.time() #starting time 
file_name = input('Enter a file name: ') 
f = open(file_name, 'r') 
data = f.readlines() 
final_data = [] 

for line in data: 
     values = line.split() 
     neighbors = values[3].split(',') 
     vertex_mod = int(values[0])-1 
     read_line = dict({ 
       'vertex': vertex_mod, 
       'visited': values[1], 
       'letter': values[2], 
       'neighbors': neighbors 
       }) 
     final_data.append(read_line) 


def dfs(vertex, my_queue): 
    if vertex['visited'] == '0': 
      print(vertex['letter']) 
      int_vertex = int(vertex['vertex']) 
      my_queue[int_vertex]['visited'] = '1'; 
      for neighbour in vertex['neighbors']: 
         int_neighbour = int(neighbour) 
         if my_queue[int_neighbour]['visited'] == '0': 
          result_queue = dfs(my_queue[int_neighbour], my_queue) 


     return my_queue 


dfs(final_data[1], final_data) 

我得到的輸出似乎是正確的,但我也越來越錯誤。

+1

你爲什麼要輸入'string'? PHP如何相關?我可以向你保證「相同的代碼」在PHP中不起作用。 – geoffspear

+0

當您遍歷結構並確認它看起來如預期時,會放入一對'print'。當您發現問題並且您不明白原因時,請更新您的問題,我們很樂意爲您提供幫助。調試好運 –

+1

看起來像一個錯誤的錯誤。你的鄰居是1索引,你的列表是0索引。 (這也很難調試;我建議找一個可以一直縮進的編輯器)。 – geoffspear

回答

1

不知道如果我真的理解你的代碼,但試圖改變這一行

int_neighbour = int(neighbour) 

int_neighbour = int(neighbour) -1 

你的數據結構是:

{'neighbors': ['2', '3'], 'visited': '0', 'vertex': 0, 'letter': 'A'} 
{'neighbors': ['1', '4', '5'], 'visited': '0', 'vertex': 1, 'letter': 'B'} 
{'neighbors': ['1', '2'], 'visited': '0', 'vertex': 2, 'letter': 'C'} 
{'neighbors': ['2', '5'], 'visited': '0', 'vertex': 3, 'letter': 'D'} 
{'neighbors': ['2', '4'], 'visited': '0', 'vertex': 4, 'letter': 'E'} 

和它看起來像使用int_neighbour作爲數組的索引。該數組爲零索引,並且您的輸入文件使用1-5作爲標識符。

+0

謝謝,它工作:) –

相關問題