【发布时间】:2019-04-21 05:59:06
【问题描述】:
这是一个关于列表和 for 循环的非常简单的问题。
假设我有以下二维列表:
[
['c', 'a', 't', 'c', 'a', 't']
['a', 'b', 'c', 'a', 't, 'l']
['c', 'a', 't', 'w', 'x', 'y']
]
我想使用 for 循环遍历列表,每次检查单词“猫”是否在列表中。 如果是,我想每次出现时都将其添加到列表中。
所以我的结果应该是['cat', 'cat', 'cat, 'cat']
我的函数接收一个单词列表和一个给定的矩阵(包含字母列表的二维列表)。 我的代码是:
def search_for_words(word_list, matrix):
results = []
for word in word_list:
for line in matrix:
line_string = ''.join(line)
if word in line_string:
results.append(word)
return results
如果 cat 在单词列表中,它只会返回“cat”。
我知道我可能只需要另一个 if 语句,但我可以弄清楚。
提前致谢。
编辑:
我举了一个错误的例子。
考虑一下:
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']]
word_list = ['apple', 'god', 'dog', 'CAT', 'PoP', 'poeT]
我的函数返回:
['苹果','上帝','PoP']
当我期望它返回“PoP”两次时,因为它在底部列表中出现了两次。
【问题讨论】:
-
欢迎来到 SO!无法重现您的问题,代码会产生正确的输出,假设您修复了缩进错误。
-
对我来说,返回的列表中有 3 次出现
cat(而不是 4 次),但这是一个不同的问题。 -
我用适当的例子编辑了我的问题。对困惑感到抱歉。 @ggorlen
-
行
if word in line_string只检查line_string中的word一次。你需要找到第一个匹配的索引,然后再次从index of the last match + 1开始寻找下一个匹配