使用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']

点赞
评论