在python中,将一个列表中的相同元素分配给另一个列表中的相同索引的最佳方法是什么?

在python中,将一个列表中的相同元素分配给另一个列表中的相同索引的最佳方法是什么?,python,list,Python,List,我想把一个单词作为一个字符串,把它变成一个字符串的“regularList”,为单词中的每个字母生成一个“dummyList”,其中包含一个字符串“-”,然后在“regularList”中循环,同时从“regularList”中删除我猜测的字母的每个实例,并将其重新分配到“dummyList”的同一索引中。基本上,我需要做: regularList = [['a', 'a', 'r', 'd', 'v', 'a', 'r', 'k']] dummyList = ['_','_','_','_',

我想把一个单词作为一个字符串,把它变成一个字符串的“regularList”,为单词中的每个字母生成一个“dummyList”,其中包含一个字符串“-”,然后在“regularList”中循环,同时从“regularList”中删除我猜测的字母的每个实例,并将其重新分配到“dummyList”的同一索引中。基本上,我需要做:

regularList = [['a', 'a', 'r', 'd', 'v', 'a', 'r', 'k']]
dummyList = ['_','_','_','_','_','_','_']
进入:

以下是我的尝试:

word = 'aardvark'

def changeLetter(word):
    guess = raw_input('Guess a letter:') # When called, guess:a
    print word
    dummyList = []
    for i in word:
        dummyList.append('_ ')
    print dummyList
    regularList = [list(i) for i in word.split('\n')]
    print regularList
    numIters = 0
    while guess in regularList[0]:
        numIters += 1
        index = regularList[0].index(guess)
        dummyList[index] = guess
        del regularList[0][index]
    print regularList
    print dummyList
    print numIters


changeLetter(word)
此代码生成:

Samuels-MacBook:python amonette$ python gametest.py
Guess a letter:a
aardvark
['_ ', '_ ', '_ ', '_ ', '_ ', '_ ', '_ ', '_ ']
[['a', 'a', 'r', 'd', 'v', 'a', 'r', 'k']]
[['r', 'd', 'v', 'r', 'k']]
['a', '_ ', '_ ', 'a', '_ ', '_ ', '_ ', '_ ']
3
正如您所看到的,没有重新分配适当的索引

word = 'aardvark'

def changeLetter(word):
    guess = raw_input('Guess a letter:') # When called, guess:a
    print word
    dummyList = []
    for i in word:
        dummyList.append('_ ')
    print dummyList
    regularList = [list(i) for i in word.split('\n')]
    print regularList
    numIters = 0
    position = 0
    length = len(regularList[0])
    while numIters < len(regularList[0]):
        if regularList[0][numIters] == guess:
            dummyList[position] = guess
            del regularList[0][numIters]
            numIters -=1
        position +=1
        numIters +=1
    print regularList
    print dummyList
    print numIters


changeLetter(word)
在这个循环中,当您删除第一个a时,列表变成['a','r','d','v','a','r','k']

while guess in regularList[0]:

现在,当循环继续时,guess变成“r”,它是上一个列表中的下一个元素。因此,以前位于位置1的a被忽略(基于0的索引)。

可以使用enumerate,然后删除元素:

for index, element in enumerate(regularList):
    if element == "a":
        dummyList[index] = element
regularList.remove("a")

被接受的答案太长了,你可以使用一个干净的列表

currentWord = [letter if letter in guessedLetters else "_" for letter in solution]
没有win逻辑的完整功能猜测单词程序将是6行

solution = "aardvark"
guessedLetters = []
while True:
    guessedLetters.append(input("Guess a letter "))
    currentWord = [letter if letter in guessedLetters else "_" for letter in solution]
    print(" ".join(currentWord))
这将产生:

Guess a letter a
a a _ _ _ a _ _
Guess a letter k
a a _ _ _ a _ k
Guess a letter v
a a _ _ v a _ k
Guess a letter r
a a r _ v a r k
Guess a letter d
a a r d v a r k
Guess a letter 

不要在Loop中删除列表元素是的,我刚刚想到了!我尝试将“del regularList[0][index]”更改为:“regularList[0][index]。替换(regularList[0][index],'h')”,只是为了将字符串“”作为占位符。这会产生一个错误。你知道它有什么毛病吗?哦,是的,那么程序永远不会终止。你的循环永远不会结束这个程序工作。杰出的我会研究这个来了解我做错了什么。非常感谢。
Guess a letter a
a a _ _ _ a _ _
Guess a letter k
a a _ _ _ a _ k
Guess a letter v
a a _ _ v a _ k
Guess a letter r
a a r _ v a r k
Guess a letter d
a a r d v a r k
Guess a letter