![](/img/trans.png)
[英]What is the best way to calculate maximum and minimum values for one list, for each distinct value of another list in Python?
[英]What is the best way in python to assign each of the same element of one list to the same indices on another list?
我考虑具有字作为一个字符串,使得它变成一个字符串“regularList”,产生一“dummyList”,其中包含一个字符串“-'for在单词的每个字母,然后通过‘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)
删除元素时,程序会犯一个错误,即数组的大小变小,而下一个要变的元素将成为前一个。
RegularList [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的索引)。
也许用枚举然后删除元素:
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]
一个没有猜测逻辑的全功能单词程序将是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.