我需要通过输入给定的搜索方向,在列表列表(有点矩阵)中找到单词。 因此,例如,如果我需要搜索从右到左的所有水平单词-我将通过操纵在列上运行的索引来做到这一点。
the_matrix = [['a', 'p', 'p', 'l', 'e'],
['a', 'g', 'o', 'd', 'o'],
['n', 'n', 'e', 'r', 't'],
['g', 'a', 'T', 'A', 'C'],
['m', 'i', 'c', 's', 'r'],
['P', 'o', 'P', 'o', 'P']]
the_word_list = ['ert','PoP']
def find_words_in_matrix(directions):
good_list = []
for col in range(len(the_matrix[0])):
for row in range(len(the_matrix)):
for word in the_word_list:
for i in range(len(word)):
found_word = True
#a = word[i]
if col + i > len(the_matrix[0])-1:
break
#b = the_matrix[row][col+i]
if word[i] != the_matrix[row][col+i]:
found_word=False
break
if found_word is True:
good_list.append(word)
return good_list
我正在获取输出:
['PoP', 'ert', 'PoP', 'ert', 'PoP']
代替:
['PoP', 'ert', 'PoP']
* pop显示在底部,而不是三次。只能说一次。 那是我的问题
感谢您的帮助!
答案 0 :(得分:0)
当break
在整个单词匹配之前提前终止循环时,您将获得零散匹配。要消除这种情况,您可以跟踪匹配长度:
def find_words_in_matrix(directions):
good_list = []
for col in range(len(the_matrix[0])):
for row in range(len(the_matrix)):
for word in the_word_list:
match_len = 0
for i in range(len(word)):
found_word = True
#a = word[i]
if col + i > len(the_matrix[0])-1:
break
#b = the_matrix[row][col+i]
if word[i] != the_matrix[row][col+i]:
found_word=False
break
match_len += 1
if (match_len == len(word)) and (found_word is True):
good_list.append(word)
return good_list