如何在遍历列表时删除列表中的项

2024-05-19 03:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单词列表,还有一个函数,可以根据单词的长度和单词内部的字母搜索单词

结尾处的for循环循环遍历可能的单词列表(由给定的长度生成),如果包含给定的字母,则应打印该单词;如果不包含给定的字母,则应从可能的单词列表中删除该单词

我如何在这里实现这一点:

wlist = ['Apple', 'Banana', 'Cherry', 'Donkey']

def wordSearch(wlist):
    posWords = []
    length = int(input('Enter length of word: '))
    print("POSSIBLE WORD(S):")
    for word in wlist:
        stripWord = word.replace(' ', '')
        if len(stripWord) == length:
            print("%s (%s)" % (word, length))
            posWords.append(word)

    while True:
        searchOptions = ['Add Known Letter', 'Exit']
        searchIndex, item = chooseFromMenu(searchOptions)
        if searchIndex == 0:
            letter = input('Enter letter: ')
            print("POSSIBLE WORD(S):")
            for word in posWords:
                if letter in word:
                    print(word)
                else:
                    # remove word from list somehow
        else:
            break

具体而言,该区块:

letter = input('Enter letter: ')
print("POSSIBLE WORD(S):")
for word in posWords:
    if letter in word:
        print(word)
    else:
        # remove word from list somehow

我试过做del wordposWords.pop(word),但似乎都不管用

我也试过.remove(),但我记不清我用它做了什么

我将更详细地讨论我在这里遇到的问题

如果我输入字母“e”,它应该从可能的单词列表中删除“香蕉”,这样当我输入“n”时,我应该只得到“驴子”,而不是“驴子”和“香蕉”

如果这有道理的话

我刚刚试过posWords.remove(word),但它也没有这样做


Tags: in列表forinputif字母单词length
3条回答

如果我正确理解了你的问题,那么以下方法应该有效:

letter = input('Enter letter: ')
print("POSSIBLE WORD(S):")
for word in posWords[:]:
    if letter in word:
        print(word)
    else:
        posWords.remove(word)

您可以反向迭代列表,这样删除元素不会影响迭代的其余部分

for i in range(len(posWords)-1, -1, -1):
    if letter in posWords[i]:
        print(posWords[i])
    else:
        posWords.pop(i)

这就是你所说的问题解决不了你的问题的答案

请注意pop()的参数是列表索引,而不是列表元素

您可以使用while循环,并且仅在未删除任何项的情况下增加迭代器

i = 0
while i < len(posWords):
    if letter in word:
        print(word)
        i += 1
    else:
        del posWords[i] # posWords.pop(i) does the same

这是可行的,因为如果删除一个项目,下一个项目索引将减少1,因此我现在指向下一个项目

相关问题 更多 >

    热门问题