繁体   English   中英

在二维数组中搜索字符串的最快方法是什么

[英]What is the fastest way of searching for string in 2d array

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

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性能)是什么?

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

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

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

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

如果必须重复执行此过程,则可以使用字典创建索引:

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

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

rows = index[some_string]

这是要付出额外内存开销的代价的,因为您要存储列零中的每个唯一值和要启动的整数列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM