python 中的矩阵搜索词

matrix searching word in python

我需要构建一个函数来从字母矩阵中的列表中搜索单词, 如果一个词存在,该函数将 return 元组列表与矩阵中的词。在每个元组中有一个单词和它在矩阵中出现的次数。(单词,数字) 我卡住了,我想得到帮助。

def right(word_list, matrix):
    sum_lst = []
    one_word = [''.join(row) for row in matrix]
    for word in word_list:
        for string in one_word:
            print(string)
            count =string.count(word)
            if word in string:
                if (word,count) not in sum_lst:
                    sum_lst.append((word, count))



    return sum_lst

这让我想起了一个事实,即一个词出现了一次,即使它实际上出现了不止一次。

It brings me back to the fact that a word appears once even if it actually appears more than once.

如果不同,posted 代码将抓取字数,例如相同的词但计数不同(比如 1 和 2)。

我想你的意思是,同一个词出现在 matrix 的多行中,然后每行出现都算作 +1

如果我运行这个例子:


matrix =[['a', 'b', 'b', 'a'], 
         ['a', 'b', 'b', 'a', 'a', 'b', 'b', 'a'], 
         ['e', 'f', 'g'], 
         ['e', 'f', 'e', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'h']]

words = ['abba']
result = right(words, matrix)
result

用post中给出的代码我明白了

>>> result
[('abba', 1), ('abba', 2)]

而您想要的听起来是:[('abba', 2)]

这里我会保留一个字典,其中包含单词及其在行中出现的频率,并在最后转换为元组列表,假设您需要来自问题的那种格式的结果。

def right(words, matrix):
    word_occur = dict()
    one_word = [''.join(row) for row in matrix]
    for word in words:
        if word in one_word:
            word_occur[word] = word_occur.get(word,0) + 1
    return [item for item in word_occur.items()]

在我给出的例子中给出了

[('abba', 3)]

计算第 1、2、4 行。对于评论中提供的示例,它给出:

[('app', 2), ('nner', 1)]

这听起来像你想要的。