元素不从列表中删除

时间:2017-07-19 22:51:05

标签: python list

我正在创建一个刽子手程序,我使用list()函数将单词转换为一个列表,其中每个字母都是自己的元素。当用户输入字母作为猜测时,我希望从列表中删除该字母。我已经尝试了list.remove(obj)功能,当我在shell中输入列表名称时,它没有工作,没有删除任何字母。

wordList=list(word)
letter=input("please enter a letter")
if len(letter)>1:
    print('invalid input, you may only enter one letter at a time')
elif letter.isalpha():
    if letter in letters:
        print('you have already entered this letter')
    else:
        letters.append(letter)

        if any(letter in s for s in wordList,):
            print(letter,"is in the word")
            wordList.remove(letter)

编辑了长度。 任何想法为什么这些字母都没有从wordList删除?

2 个答案:

答案 0 :(得分:0)

我能够运行你的代码。建议删除多次出现的信件稍作改动。

word = "apple"
wordList=list(word)
while wordList != []:
    letter=input("please enter a letter")
    letters = []
    if len(letter)!=1:
        print('invalid input, you may only enter one letter at a time')
    if letter.isalpha():
        if letter in letters:
            print('you have already entered this letter')
        else:
            letters.append(letter)
        if any(letter in s for s in wordList,):
            print(letter,"is in the word")
            wordList =filter(lambda a: a != letter, wordList)
            #wordList.remove(letter)
    print wordList

list.remove() - 仅删除第一次出现的字母。你可以使用:

filter(lambda a: a!=letter, wordList) 

答案 1 :(得分:0)

我重新创建了它,它对我有用: enter image description here

然而我不认为这是解决问题的正确方法,因为.remove()仅适用于列表中的第一个匹配项,您可以尝试类似

的方法
letters = list('_'*len(wordList))
if letter in wordList:
    qtty = wordList.count(letter)
    position = wordList.index(letter)
    letters[position] = letter
if qtty > 1:
    for i in range(qtty-1):
        position = wordList.index(letter, position+1)                
        letters[position] = letter

你有这样的方式,而不是一个完整的列表,每次插入rigth字母时删除,你将有一个空的(实际上是#39; _'字符)列表,每个字母添加到其位置你插入正确的字母的时间,这样你可以像这样打印当前的单词 enter image description here

我制作了这样的游戏,它在我的github上,说明是西班牙语,但很容易跟进