如何检查一个字符是否在Python中的字符串中的特定位置?

How to check if a character is in a specific position in a string in Python?

我正在为刽子手制作一个算法,它可以很好地猜出这个词,但它并没有完全按预期工作。它应该检查字符的特定位置,但它并没有真正起作用。例如,我将使用 aardvark 这个词。它猜对的第一个字母是 a,aardvark 包含 3 个 a,所以算法看到的是:

aa_ _ _ a _ _

但是当我检查可能的词时,大多数都不是这样的,算法应该可以立即解决它,因为它是唯一一个看起来像这样的词。

该程序具有删除包含错误猜测字母的单词的功能,以及猜测最佳字母的功能。这两个功能都能完美运行。

这是无效的代码部分,应该检查字母的位置:

def narrowdown(guessedword, possible):
    for i in guessedword:
        if i != "_":
            for j in possible:
                k = list(j)
                if k[guessedword.index(i)] != i:
                    possible.remove(j)

这里guessedword是猜测者可以看到的字母的列表版本,possible是猜出的单词可能是的单词列表。 “_”是猜测者看不到的空白字母。

每次猜到一个单词后,它都会重复这个函数。

问题在于它包含绝对不符合条件的词。例如,我将再次使用 aardvark。

当单词看起来像这样:aa_ _ _ a _ _

而猜错的字母是e、i、s、u,它仍然显示这些字:

['aardvark', 'aardwolf', 'abnormal', 'adorably', 'advocacy', 'agaragar', 'agronomy', 'anaconda', 'anaphora', 'approach', 'approval', 'arrogant', 'atombomb']

正如我所说,aardvark 是唯一满足所有这些条件的词,但该算法仍需要再进行 3 次猜测才能找出它是哪个词。

有人知道如何解决这个问题吗?

多行解决方案:

def narrowdown(guessedword, possible):
    res = []
    for w in possible:
        if (len(w) == len(guessedword)) and all((c1 == "_") or (c1 == c2) for c1, c2 in zip(guessedword, w)):
            res.append(w)
    return res

words = ['aardvark', 'aardwolf', 'abnormal', 'adorably', 'advocacy', 'agaragar', 'agronomy', 'anaconda', 'anaphora', 'approach', 'approval', 'arrogant', 'atombomb']
mask = "aa___a__"

print(narrowdown(mask, words))

一行解决方案:

def narrowdown(gw, p):
    return [w for w in p if (len(w) == len(gw)) and all((c1 == "_") or (c1 == c2) for c1, c2 in zip(gw, w))]

words = ['aardvark', 'aardwolf', 'abnormal', 'adorably', 'advocacy', 'agaragar', 'agronomy', 'anaconda', 'anaphora', 'approach', 'approval', 'arrogant', 'atombomb']
mask = "aa___a__"

print(narrowdown(mask, words))