如何在python列表中删除和返回元素

时间:2015-01-14 23:08:11

标签: python list

在python中,你可以做list.pop(i),删除并返回索引i中的元素,但是有一个内置函数,如list.remove(e),它删除并返回第一个等于e的元素?

由于

3 个答案:

答案 0 :(得分:4)

我的意思是,有list.remove,是的。

>>> x = [1,2,3]
>>> x.remove(1)
>>> x
[2, 3]

我不知道为什么你需要它来返回被删除的元素。你已经把它传递给了list.remove,所以你知道它是什么...我想如果你在列表中的对象上重载了__eq__,那么它实际上并不对应于某些对象合理的平等观念,你可能会有问题。但是不要这样做,因为那会很糟糕。

如果你做了那件可怕的事情,那么推出你自己的功能并不困难:

def remove_and_return(lst, item):
    return lst.pop(lst.index(item))

答案 1 :(得分:2)

有建筑吗?不。可能是因为如果您已经知道要删除的元素,那么为什么还要回来呢? 1

您可以做的最好的事情是获取索引,然后弹出它。最终,这不是一件大事 - 链接2 O(n)算法仍然是O(n),所以你仍然可以大致相同......

def extract(lst, item):
    idx = lst.index(item)
    return lst.pop(idx)

1 当然,有一些病理情况,退回的物品可能不是您已经知道的物品......但它们并不重要,无法保证一种新方法只需3行就可以自己写: - )

答案 2 :(得分:1)

严格来说,你需要这样的东西:

def remove(lst, e):
    i = lst.index(e)
    # error if e not in lst
    a = lst[i]
    lst.pop(i)
    return a

仅当e == a为真,但e is a为假,并且您确实需要a而不是e时才有意义。

但在大多数情况下,我会说这表明您的代码中存在可疑之处。

简短版本是:

a = lst.pop(lst.index(e))