2013-02-19 72 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中的每个唯一值以及要引导的整数列表。

如果您不需要保持二维数组格式的数据,您可以考虑将其重构为字典。你可以使用你的搜索字符串作为映射到元组列表的键,其中每个元组保存来自该行中其他列的数据。

相关问题