使用for循环从列表中删除字符

我在理解“ for循环”在Python中的工作方式时遇到了麻烦。我想使用for循环从列表中删除字符,以遍历列表,但输出与预期不符。  在以下代码中,我要删除字符“ e”:

lista = ['g', 'e', 'e', 'k', 'e','s', 'e', 'e']

for x in lista:
 if x == 'e':
   lista.remove(x)

print(lista)

当我期望['g','k','s']时,它会打印['g','k','s','e','e']。

谢谢。

评论
  • 神经
    神经 回复

    在列表上进行迭代时,无法将其从列表中删除。这是因为当您从列表中删除一个项目时,它会缩小。因此,发生的事情是,当您遇到“ e”时,列表将缩小,然后转到列表中的下一项。但是由于列表缩小,因此您实际上跳过了一个项目。

    为了解决您的问题,您必须遍历列表的副本。

    lista = ['g', 'e', 'e', 'k', 'e','s', 'e', 'e']
    
    for x in lista.copy():
       if x == 'e':
          lista.remove(x)
    
    print(lista)
    
  • 龙
    回复

    您可以使用以下代码来实现以下目的

    lista = ['g', 'e', 'e', 'k', 'e','s', 'e', 'e']
    
    for i in range(0, len(lista)):
        element = lista[i]
        if element == 'e':
            del lista[i]
    

    一种更简单,更好的方法如下:

    list(filter(('e').__ne__, lista))

    两种方法都返回

    ['g', 'k', 's']