2013-02-19 118 views
1

我需要在二維數組的第一列中搜索字符串。最明顯的方法是什麼是在二維數組中搜索字符串的最快方法

for i in range (0, len(list)): 
if list[i][0]==searchstring: 
    list[i][4]=do_a_bunch_of_stuff 

我需要知道「我」是這樣我可以do_a_bunch_of_stuff同一行。 我需要遍歷二維數組中的所有行

速度是不是漂亮的代碼的主要因素。什麼是最快(CPU性能)的方式呢?

+0

您的數組以任何方式排序? – dckrooney 2013-02-19 20:11:06

+0

它是不是排序 – 2013-02-19 20:11:59

+0

它需要是一個二維數組?例如,你是否願意/能夠考慮使用能夠提供更快性能的其他數據結構(如字典)? – abought 2013-02-19 20:14:08

回答

1

有沒有一種更快的方法來做到這一點,你將永遠需要比較搜索字符串的每個內部列表的第一個元素。

下可能相對較快,只是因爲它避免了兩個索引查找的:

for x in lst: 
    if x[0] == searchstring: 
     x[4] = do_a_bunch_of_stuff 
+0

此外,它避免了創建列表的「範圍」調用(它可能是一個大列表)。 – JCash 2013-02-19 22:11:21

0

由於列是未排序,線性搜索將是你希望可以從搜索最快的,因爲你將需要檢查每個元素。

index = {} 
for i in range (0, len(list)): 
    index[list[i]] = index.get(list[i], list()) + [i] 

然後,您可以簡單地查找您需要搜索使用任何字符串的索引:

如果這是你必須重複做的過程中,你可以使用字典創建索引

rows = index[some_string] 

這是以額外的內存開銷爲代價的,因爲您要存儲列0中的每個唯一值以及要引導的整數列表。

如果您不需要保持二維數組格式的數據,您可以考慮將其重構爲字典。你可以使用你的搜索字符串作爲映射到元組列表的鍵,其中每個元組保存來自該行中其他列的數據。

相關問題