在二维数组中搜索字符串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)]