1

我需要在二维数组的第一列中搜索一个字符串。最明显的方法是

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

我需要知道“i”在哪里,以便我可以对同一行执行 do_a_bunch_of_stuff。我需要遍历二维数组中的所有行

速度是不是漂亮代码的主要因素。执行此操作的最快(CPU 性能)方法是什么?

4

2 回答 2

1

没有真正更快的方法可以做到这一点,您将始终需要比较搜索字符串的每个内部列表的第一个元素。

以下可能会稍微快一些,因为它避免了几个索引查找:

for x in lst:
    if x[0] == searchstring:
        x[4] = do_a_bunch_of_stuff
于 2013-02-19T20:14:30.150 回答
0

由于该列未排序,因此线性搜索将是您希望从搜索中获得的最快速度,因为您需要检查每个元素。

如果这是您必须重复执行的过程,您可以使用字典创建索引:

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

然后,您可以简单地查找您需要搜索的任何字符串的索引:

rows = index[some_string]

这是以额外的内存开销为代价的,因为您要存储来自第 0 列的每个唯一值和要引导的整数列表。

如果您不需要将数据保留为 2D 数组格式,则可以考虑将其重组为字典。您可以将搜索字符串用作映射到元组列表的键,其中每个元组都保存该行中其他列的数据。

于 2013-02-19T20:21:22.303 回答