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