在列表中的元素中搜索子字符串并删除该元素

时间:2012-10-18 11:10:29

标签: python list search element substring

我有一个列表,我正在尝试删除其中包含'pie'的元素。这就是我所做的:

['applepie','orangepie', 'turkeycake']
for i in range(len(list)):
    if "pie" in list[i]:
         del list[i]

我一直在使列表索引超出范围,但是当我将del更改为print语句时,它会打印出正常的元素。

5 个答案:

答案 0 :(得分:6)

不要从列表中删除您正在迭代的项目,而是尝试使用Python的list comprehension syntax创建一个新列表:

foods = ['applepie','orangepie', 'turkeycake']
pieless_foods =  [f for f in foods if 'pie' not in f]

答案 1 :(得分:2)

在迭代期间删除元素,更改大小,导致IndexError。

您可以将代码重写为(使用列表理解)

L = [e for e in L if "pie" not in e]

答案 2 :(得分:2)

类似的东西:

stuff = ['applepie','orangepie', 'turkeycake']
stuff = [item for item in stuff if not item.endswith('pie')]

修改一个你正在迭代的对象应该被视为禁止使用。

答案 3 :(得分:1)

您收到错误的原因是因为您在删除某些内容时更改了列表的长度!

示例:

first loop: i = 0, length of list will become 1 less because you delete "applepie" (length is now 2)
second loop: i = 1, length of list will now become just 1 because we delete "orangepie"
last/third loop: i = 2, Now you should see the problem, since i = 2 and the length of the list is only 1 (to clarify only list[0] have something in it!).

所以请使用类似的东西:

for item in in list:
    if "pie" not in item:
        new list.append(item)

答案 4 :(得分:0)

另一种更长的方法是记下遇到饼的索引并在第一个for循环后删除这些元素