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

1 投票
2 回答
5241 浏览
提问于 2025-04-17 16:24

我需要在一个二维数组的第一列中查找一个字符串。最简单的方法就是

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

我需要知道“i”在哪里,这样我才能对同一行做很多事情。我需要遍历这个二维数组中的所有行。

速度是最重要的因素,不需要考虑代码的美观。有什么最快(CPU性能)的方法来做到这一点呢?

2 个回答

0

因为这列数据是无序的,所以线性搜索是你能用的最快的方法。线性搜索的意思就是你需要检查每一个元素,才能找到你想要的。

如果你需要重复进行这个搜索的过程,可以考虑用字典来创建一个索引:

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

这样的话,你就可以很简单地查找任何你需要搜索的字符串的索引了:

rows = index[some_string]

不过,这样做会占用更多的内存,因为你需要存储第一列中的每个唯一值,还要存一个整数列表。

如果你不需要把数据保持在二维数组的格式,可能可以考虑把它重构成一个字典。你可以把你的搜索字符串当作键,映射到一个元组的列表中,每个元组里存放的是那一行其他列的数据。

1

其实没有更快的方法来做到这一点,你总是需要比较你要查找的字符串中每个内部列表的第一个元素。

下面的方法可能会稍微快一点,因为它避免了几次查找索引:

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

撰写回答