найти слова в списке списков - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно найти слова в списке списков (несколько матричных), введя заданное направление для поиска.так, например, если мне нужно найти все слова, расположенные горизонтально справа налево - я сделаю это, манипулируя индексами, которые бегут по столбцам.

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

* всплывающее окно показывает два раза в нижней строке, а не три раза.и только один раз.это моя проблема

спасибо за помощь!

1 Ответ

0 голосов
/ 19 ноября 2018

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