在列表列表中查找单词

时间:2018-11-19 16:54:32

标签: python list

我需要通过输入给定的搜索方向,在列表列表(有点矩阵)中找到单词。 因此,例如,如果我需要搜索从右到左的所有水平单词-我将通过操纵在列上运行的索引来做到这一点。

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显示在底部,而不是三次。只能说一次。 那是我的问题

感谢您的帮助!

1 个答案:

答案 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