2014-01-21 51 views
1

我試圖做這樣的事情在Python代碼如下列表索引必須是整數,而不是str的

PHP代碼:

if(!$my_data[$n_vertex]['visited']){  
    $my_data[$n_vertex-1]['visited'] = true; 
} 

什麼,我究竟在做的Python

def bfs(my_data): 
     my_queue = [] #array to store vertices 
     my_queue.insert(0, my_data[0]); #pass the first value to the first index of queue 
     my_data[0]['visited'] = 'true'; 
     while my_queue: 
       vertex = my_queue.pop() 


     for n_vertex in vertex['neighbors']: 
       #print(n_vertex) 

       if my_data[n_vertex]['visited']: 
          continue 
       else: 
          my_data[n_vertex]['visited'] = 'true' 
          my_queue.insert(0, my_data[n_vertex]); 

而我收到以下內容錯誤

File "/Users/osamayawar/Desktop/Python/BFS.py", line 30, in bfs 
if my_data[n_vertex]['visited']: 
TypeError: list indices must be integers, not str 

究竟是什麼意思的列表索引必須是整數。

注: BFS是我的函數名

+1

什麼是my_data?什麼是'n_vertex'? –

+0

現在增加了完整的功能 - 它可以幫助 –

+0

@JeffCraine:PHP的數組類型不像Python的列表類型。你需要使用列表和字典。 – Blender

回答

1

在Python中,列表索引總是整數。您可以通過使用索引來訪問的項目:

l = ['a', 1, 2] 
print l[0] ## 'a' 
print l[1] ## 1 

你可能想要的是一個dict

d = {'vertex': 120} 
print d['vertex'] #120 
+0

是的,我需要一本字典。下面粘貼了我的代碼。我不知道如何得到它,因爲它是循環 內的n_vertex在頂點[ '鄰居']: #PRINT(n_vertex) 如果[n_vertex] my_data [ '拜訪']: 繼續 其他: my_data [n_vertex] ['visited'] ='真' my_queue.insert(0,my_data [n_vertex]); –

+0

@JeffCraine請更新問題並告訴我們數據結構是什麼樣的。 – aIKid

0

你試圖傳遞一個字符串作爲列表索引:

my_data[n_vertex]['visited'] 

'visited'不是一個數字。

您能否包括您的my_data聲明?

+0

visited是true和false - 用作布爾值。 my_data實際上是讀取一個文件,其中訪問的數據是false或true。 –

+0

然後,你可能已經意識到,你需要使用字典結構。 – lightandlight

0

由於堆棧跟蹤報告,my_data[n_vertex]list。您無法通過non-integer索引訪問list。例如,您可以通過範圍[0,length - 1]中的索引訪問它。

list1 = ["a", "b", "c"] # 3 elements 
print list1[0] 
print list1[1] 
print list1[2] # length - 1 

您可能想要read more about lists

注意,在Python中,dictionaries可以通過任何類型的不可變的訪問(strint,...)。

0

這意味着my_data[n_vertex]解析爲一個列表,並且當列表只接受整數下標時,您試圖通過字符串鍵訪問它的一個項目。

如果添加下面一行到你的程序:

print type(my_data[n_vertex]) 

它將打印<type 'list'>

您的代碼中可能存在創建my_data對象的錯誤。 您可能希望my_data上的項目爲dict而不是列表。

1

Python列表索引必須是整數。 PHP使用鍵值對來訪問數組中的項目,並且可能有重複項。例如:

$array= array("name" => "Bill", "job" => "programmer", 
       0 => "Bill", 
       1 => "programmer"); 

PHP數組更類似於Python字典。請參閱Python standard library docs on dictionaries

這將有助於查看您正在使用的數據。 (中my_data值)

如果你有一個數據結構,看起來與此類似,這是一個字典列表,它可以工作:

my_data=[{"visited":False, "some_other_key":"string-value"}, 
     {"visited":True, "some_other_key":"string-value"} 
     ] 

您可能需要重新編寫Python代碼如下所述,以使其更「pythonic」。

if not my_data[n_vertex]['visited']: 
    my_data[n_vertex]['visited'] = True 
    my_queue.insert(0, my_data[n_vertex]) 
相關問題