String 获取字符串中重复字母的索引

String 获取字符串中重复字母的索引,string,python-3.x,indexing,zelle-graphics,String,Python 3.x,Indexing,Zelle Graphics,当用户的字母猜测出现在字母表中时,就会执行这段代码,然后我会遍历所选单词中的每个字母,如果单词中的某个字母与猜测字母相同,我会将该字母的索引存储在一个空列表中,这样我就可以用它来告诉计算机在哪里画空行上的字母 除了单词中有重复的字母外,它工作正常。例如,工程有3个es。不幸的是,.index()只记录字母第一次出现时的索引,而忽略其他字母这方面的工作是什么,这样我可以得到该单词中所有3个e的索引,而不是第一个e的3个索引。出于测试目的,我已经在控制台上打印了所选单词和索引列表,这样我就可以看到发

当用户的字母猜测出现在字母表中时,就会执行这段代码,然后我会遍历所选单词中的每个字母,如果单词中的某个字母与猜测字母相同,我会将该字母的索引存储在一个空列表中,这样我就可以用它来告诉计算机在哪里画空行上的字母


除了单词中有重复的字母外,它工作正常。例如,工程有3个es。不幸的是,.index()只记录字母第一次出现时的索引,而忽略其他字母这方面的工作是什么,这样我可以得到该单词中所有3个e的索引,而不是第一个e的3个索引。出于测试目的,我已经在控制台上打印了所选单词和索引列表,这样我就可以看到发生了什么,所以我实际上不必猜测字母

你可以这样做

            else:
                if textCheck == 1:
                    invalidText.undraw()
                    textCheck = 0
                for letter in word:
                    if letter == guess:
                        indexes.append(word.index(guess))
                        print(indexes)
>>> my_list=list()
>>> index_e = indexes(word,"e")
>>> my_list.extend( index_e )
>>> my_list
[0, 5, 6]
>>> 
试验

这个函数是一个,也就是说是一个惰性函数,只有在被要求时才给出结果。为了得到一个单独的结果,你使用
next
,函数会一直执行到第一个,然后返回结果并停止执行,记住它在哪里,直到在切换点中执行对下一个的另一个调用,从上一个点恢复执行直到下一个屈服,如果不再是raise STOP迭代,例如:

>>> list( indexes("engineering","e") )
[0, 5, 6]
>>> 
生成器用于这样的情况,它们的结果只是其他内容的中间步骤,因为它们使用的内存量最小,但在这种情况下,您可能需要整个内容,因此将其作为第一个示例使用,或者重新生成函数以在第一个位置返回一个列表,如下所示

            else:
                if textCheck == 1:
                    invalidText.undraw()
                    textCheck = 0
                for letter in word:
                    if letter == guess:
                        indexes.append(word.index(guess))
                        print(indexes)
>>> my_list=list()
>>> index_e = indexes(word,"e")
>>> my_list.extend( index_e )
>>> my_list
[0, 5, 6]
>>> 

很抱歉,如果我把你和收益率混淆了。

你到底是如何实现这一点的?我是否在word for循环中调用for letter中的index函数?yield我到底做什么呢?
yield
将这个函数作为一个生成器,这是一个惰性函数,当要求它时给出结果,你可以把它看作一个虚拟列表,在你迭代它时给出它的元素。yield我基本上是在每次找到它时返回字母的索引?我只是说indexes.append(i)?还要检查:我似乎无法让它工作,我调用了函数并将i存储在索引列表中,当我打印索引时它会这样说:[]
>>> my_list=list()
>>> index_e = indexes(word,"e")
>>> my_list.extend( index_e )
>>> my_list
[0, 5, 6]
>>> 
def indexes(word,letter):
    result = list()
    for i,x in enumerate(word):
        if x == letter:
            result.append(i)
    return result