在二维数组中搜索字符串python向右或向下移动

在二维数组中搜索字符串python向右或向下移动,python,arrays,list,search,Python,Arrays,List,Search,我有一个包含字符串的数组,如下所示: l = ["abc", "def", "hij", "klm", "nop", "qrs"] 还有一个上面写着: word = ["abc","knq","knop"] 我需要在列表中找到单词并返回相应的坐标 其特殊性在于搜索必须是水平的、垂直的或同时进行的 例如,第一个单词: abc返回索引[(0,0)(0,1)(0,2)] knqreturn[(3,0)(4,0)(5,0)] knopreturn[(

我有一个包含字符串的数组,如下所示:

l = ["abc",
     "def",
     "hij",
     "klm",
     "nop",
     "qrs"]
还有一个上面写着:

word = ["abc","knq","knop"]
我需要在列表中找到单词并返回相应的坐标

其特殊性在于搜索必须是水平的、垂直的或同时进行的

例如,第一个单词:

abc
返回索引
[(0,0)(0,1)(0,2)]

knq
return
[(3,0)(4,0)(5,0)]

knop
return
[(3,0)(4,0)、(4,1)、(4,2)]

字符串中的字符不是唯一的,我需要保存移动,例如向下移动一个字符或向右移动一个字符。
不是对角线单词查找器。

如果你有很多单词,并重复构建这些类型的列表,我会先构建一个翻译词典:

tr = dict()
for r,w in enumerate(l):
    for c,ch in enumerate(w):
        tr[ch] = (r,c)
这样,您就可以轻松创建具有列表理解功能的列表:

for w in word:
    res = [tr[ch] for ch in w]
    print(w)
    print(res)

输出:

abc
[(0, 0), (0, 1), (0, 2)]
knq
[(3, 0), (4, 0), (5, 0)]
knop
[(3, 0), (4, 0), (4, 1), (4, 2)]

我猜角色必须是直接连接的。将
l
中每个字符的索引保存在dict中,其中key是字符,value是索引元组列表。然后,您可以循环查看
word
中的单词,并从单词的第一个字符列表中的每个位置执行类似DFS的操作(向右或向下)。一个示例(按照注释):

输出

abc [(0, 0), (0, 1), (0, 2)]
knq [(3, 0), (4, 0), (5, 0)]
knop [(3, 0), (4, 0), (4, 1), (4, 2)]

数组在Python中是完全不同的。请删除对它们的引用。您可以显示您为此尝试了什么吗?重复字母会发生什么情况?没问题,如果在
word
中,则存在问题,因为您当前的词典只记录最后一个位置,然后丢失路径。此外,您的解决方案不会检查路径是否有效。在这方面,路径有点模糊。我假设只有在
word
中的单词中有重复的字母。这没关系。如果有要求,
l
中的字符串字符也必须重复,那么您是对的。因为似乎没有人对这个解决方案感兴趣,所以我不介意。这正是我想要的,但是如果我需要在没有全局变量的情况下实现它,你是如何避免全局ans声明的呢?检查编辑过的代码,去掉全局ans
abc [(0, 0), (0, 1), (0, 2)]
knq [(3, 0), (4, 0), (5, 0)]
knop [(3, 0), (4, 0), (4, 1), (4, 2)]