问题描述
我已经创建了该特定字网格的所有可能结果的列表,同时做对角线,向上,向下以及所有相反的操作):
我将其称为allWords
,但是当我也尝试查找特定单词时,我知道在allWords
的循环不会找到Hidden单词。
我知道我的问题,但我确实知道如何解决(很抱歉造成可怕的解释,希望下面的示例可以更好地说明问题):
下面是一个示例:我的wordList
是我知道隐藏在wordgrid中某个地方的单词列表。
我的allWords
是allWords
的行,列,对角线列表,但
WordList = ['HAMMER','....']
allWords = ['ARBHAMMERTYU','...']
HAMMER
在allWords
但之后被其他字符“掩盖”,因此我无法显示HAMMER
在wordgrid中。
length = len(allWords)
for i in range(length):
word = allWords[i]
if word in wordList:
print("I have found", word)
在allWords
找不到任何单词HAMMER
。
解决这个问题的任何帮助都会很棒
1楼
如果我理解正确,那么您正在尝试在allWords中找到一个匹配项,并且想要遍历WordList并确定是否存在子字符串匹配项。
因此,如果这是正确的,那么您的代码就不能完全做到这一点。 要逐步检查代码以纠正正在发生的情况:
length = len(allWords)
for i in range(length):
您上面要做的不一定是遍历所有单词。 您想遍历WordList并查看它是否在allWords内部。 您没有这样做,而是想这样做:
length = len(WordList)
for i in range(length):
考虑到这一点,这意味着现在您要引用WordList而不是allWords,因此现在要更改此内容:
word = allWords[i]
对此:
word = WordList[i]
最后,这里提供了一些新的信息,以确定您实际上在匹配的字符串中是否有子字符串匹配。 一种称为“任何”的方法。 如果找到了至少一个与您要查找的匹配项,则“ any”方法将通过返回True来工作。 看起来像这样:
any(if "something" in word in word for words)
然后,如果单词中包含“ something”,它将返回True,否则将返回False。
因此,将所有这些放在一起,并使用示例输入运行代码,我们得到:
WordList = ['HAMMER','....']
allWords = ['ARBHAMMERTYU','...']
length = len(WordList)
for i in range(length):
word = WordList[i]
if any(word in w for w in allWords):
print("I have found", word)
输出:
I have found HAMMER
2楼
你是不是比较每个word
在wordList
中的单词allWords
。
if word in wordList
的单词比较精确的单词, if word in wordList
该行。
即
if word in wordList
的单词仅在单词Hammer在wordList
时才返回True。
要匹配子字符串,您需要另一个循环:
for i in range(length):
word = allWords[i]
for w in WordList:
if w in word:
print("I have found ", word)
3楼
您可以尝试这样的事情:
for word in allWords:
if word in WordList:
print("I have found", word)
嗯,也许错误是您写了wordList并真正定义了WordList。 希望这可以帮助。
4楼
如果我正确理解了您的问题,则可能需要实现一个函数,该函数检查allWords
中的任何条目中是否存在令牌(例如'HAMMER'
)。
解决方案,我最好的选择是使用正则表达式。
import re
def findWordInWordList(word, allWords):
pattern = re.compile(".*%s.*" % word)
for item in allWords:
match = pattern.search(item)
if match:
return match
这将返回第一次出现,如果您想要更多,则很容易将它们收集在列表中。