簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM