我考虑过将一个单词作为字符串,将其放入字符串的“regularList”中,生成一个“dummyList”,其中为中的每个字母包含一个字符串“-” word,然后循环遍历“regularList”,同时从“regularList”中删除我猜测的字母的每个实例,并将其重新分配给“dummyList”的相同索引。基本上,我需要做:
regularList = [['a', 'a', 'r', 'd', 'v', 'a', 'r', 'k']]
dummyList = ['_','_','_','_','_','_','_']
进入:
regularList = [['r', 'd', 'v', 'r', 'k']]
dummyList = ['a','a','_','_','_','a','_','_']
这是我的尝试:
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)
当你删除一个元素时,你的程序会出现一个错误,数组的大小会变小,而下一个元素会变成上一个元素。
常规列表[0] = ['a', 'a', 'r', 'd', 'v', 'a', 'r', 'k']
while guess in regularList[0]:
在此循环中,当您删除第一个 a 时,列表将变为 ['a', 'r', 'd', 'v', 'a', 'r', 'k']
现在,当循环继续时,猜测变为“r”,即前一个列表中的下一个元素。因此,先前位于位置 1 的 a 被忽略(基于 0 的索引)。
关于python - python中将一个列表中的每个相同元素分配给另一个列表上的相同索引的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914565/