如何按值从Python列表中删除项目?

时间:2013-11-15 12:51:55

标签: python list

如果我想通过其值而不是索引删除项目,我该怎么做?

animals = ['tiger', 'snake', 'penguin','giraffe']

说我想在不输入'penguin'的情况下删除del animals[2]我该怎么办?

我尝试输入del animals['penguin'],但它不起作用......

3 个答案:

答案 0 :(得分:6)

您必须找到索引,或过滤列表。

查找索引:

del animals[animals.index('penguin')]

或者,你可以删除值:

animals.remove('penguin')

其中list.remove() documented与上述del listobj[listobj.index(value)]版本相同。

如果IndexError不属于列表,则其中任何一个都可以引发'penguin'。如果列表中有多个值的副本,则只删除第一个此类副本。

过滤会删除所有此类副本:

animals = [a for a in animals if a != 'penguin']

这不会引发异常;它构建了一个全新的值列表 not 等于'penguin'

答案 1 :(得分:2)

animals.remove("penguin")

右?当然,它只删除第一个值,但它会按值而不是索引删除它。并且不需要构建新列表或需要额外调用来查找给定值的索引。

答案 2 :(得分:1)

过滤Martijn Pieters未提及的列表的另一种方法是使用内置的filter函数:

animals = filter(lambda x: x != 'penguin', animals)