[英]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.