如果我想通过其值而不是索引删除项目,我该怎么做?
animals = ['tiger', 'snake', 'penguin','giraffe']
说我想在不输入'penguin'
的情况下删除del animals[2]
我该怎么办?
我尝试输入del animals['penguin']
,但它不起作用......
答案 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)