我需要在二维数组的第一列中搜索字符串。最明显的方法是什么是在二维数组中搜索字符串的最快方法
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