-1

我需要编写一个函数来搜索矩阵中的单词。目前我正在尝试逐行搜索以查看该单词是否存在。这是我的代码:

def search(p): 
    w=[]
    for i in p:
        w.append(i)
    s=read_wordsearch() #This is my matrix full of letters
    for line in s: 
        l=[]
        for letter in line:
            l.append(letter)
            if w==l:
                return True
            else:
                pass

只有当我的单词从一行的第一个位置开始时,此代码才有效。

例如我有这个矩阵:

[[a,f,l,y],[h,e,r,e],[b,n,o,i]]

我想找到“fly”这个词,但找不到,因为我的代码只能找到“here”或“her”之类的词,因为它们从一行的第一个位置开始......

任何形式的帮助、提示、建议将不胜感激。(如果我的英语不好,对不起......)

4

4 回答 4

1

您可以将矩阵中的每一行转换为字符串并尝试在其中找到搜索工作。

def search(p):
    s=read_wordsearch()
    for line in s:
        if p in ''.join(line):
            return True
于 2014-12-23T21:29:42.250 回答
0

join内部列表中的字符以创建一个单词并使用in.

def search(word, data):
    return any(word in ''.join(characters) for characters in data)

data = [['a','f','l','y'], ['h','e','r','e'], ['b','n','o','i']]
if search('fly', data):
     print('found')

data包含矩阵,characters是每个单独的内部列表的名称。any将在找到第一个匹配项后停止(短路)。

于 2014-12-23T21:35:08.570 回答
0

我会给你一个在文本中搜索单词的提示。我认为您将能够推断出您的数据矩阵。

 s = "xxxxxxxxxhiddenxxxxxxxxxxx"
 target = "hidden"
 for i in xrange(len(s)-len(target)):
     if s[i:i+len(target)] == target:
         print "Found it at index",i
         break

如果你想搜索所有长度的单词,如果你有一个可能的解决方案列表:

 s = "xxxxxxxxxhiddenxxxtreasurexxxxxxxx"
 targets = ["hidden","treasure"]
 for i in xrange(len(s)-1):
     for j in xrange(i+1,len(s)):
         if s[i:j] in targets:
             print "Found",s[i:j],"at index",
于 2014-12-23T21:11:53.483 回答
0
def search(p): 
  w = ''.join(p)

  s=read_wordsearch() #This is my matrix full of letters
  for line in s: 
    word = ''.join(line)

    if word.find(w) >= 0:
      return True
  return False

编辑:Python 中已经有很多可用的字符串函数。您只需要使用字符串即可使用它们。

于 2014-12-23T21:14:06.700 回答