我需要在二維數組的第一列中搜索字符串。最明顯的方法是什麼是在二維數組中搜索字符串的最快方法
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性能)的方式呢?
我需要在二維數組的第一列中搜索字符串。最明顯的方法是什麼是在二維數組中搜索字符串的最快方法
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性能)的方式呢?
有沒有一種更快的方法來做到這一點,你將永遠需要比較搜索字符串的每個內部列表的第一個元素。
下可能相對較快,只是因爲它避免了兩個索引查找的:
for x in lst:
if x[0] == searchstring:
x[4] = do_a_bunch_of_stuff
此外,它避免了創建列表的「範圍」調用(它可能是一個大列表)。 – JCash 2013-02-19 22:11:21
由於列是未排序,線性搜索將是你希望可以從搜索最快的,因爲你將需要檢查每個元素。
index = {}
for i in range (0, len(list)):
index[list[i]] = index.get(list[i], list()) + [i]
然後,您可以簡單地查找您需要搜索使用任何字符串的索引:
如果這是你必須重複做的過程中,你可以使用字典創建索引
rows = index[some_string]
這是以額外的內存開銷爲代價的,因爲您要存儲列0中的每個唯一值以及要引導的整數列表。
如果您不需要保持二維數組格式的數據,您可以考慮將其重構爲字典。你可以使用你的搜索字符串作爲映射到元組列表的鍵,其中每個元組保存來自該行中其他列的數據。
您的數組以任何方式排序? – dckrooney 2013-02-19 20:11:06
它是不是排序 – 2013-02-19 20:11:59
它需要是一個二維數組?例如,你是否願意/能夠考慮使用能夠提供更快性能的其他數據結構(如字典)? – abought 2013-02-19 20:14:08