[英]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.