Поиск в матрице - питон

Мне нужно написать функцию, которая будет искать слова в матрице. На данный момент я пытаюсь искать построчно, чтобы увидеть, есть ли слово там. Это мой код:

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]]

Я хочу найти слово "летать", но не могу, потому что мой код работает только для поиска слов вроде "здесь" или "она", потому что они начинаются в первой позиции строки...

Любая форма помощи, подсказки, советы будут оценены. (и извините, если мой английский плохой...)

4 ответа

Решение

Вы можете преобразовать каждую строку в матрице в строку и попытаться найти в ней поисковую работу.

def search(p):
    s=read_wordsearch()
    for line in s:
        if p in ''.join(line):
            return True

Я дам вам совет по поиску в тексте слова. Я думаю, что вы сможете экстраполировать на вашу матрицу данных.

 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",

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 остановится после того, как найдет первое совпадение (короткое замыкание).

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 уже есть много строковых функций. Вам просто нужно использовать строки, чтобы иметь возможность их использовать.

Другие вопросы по тегам