我需要在二维数组的第一列中搜索一个字符串。最明显的方法是
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 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]
这是以额外的内存开销为代价的,因为您要存储来自第 0 列的每个唯一值和要引导的整数列表。
如果您不需要将数据保留为 2D 数组格式,则可以考虑将其重组为字典。您可以将搜索字符串用作映射到元组列表的键,其中每个元组都保存该行中其他列的数据。