如何删除 python 列表中的 return 元素

How to remove and return element in python list

在 python 中你可以做 list.pop(i) 删除和 returns 索引 i 中的元素,但是是否有像 list.remove( e) 删除第一个等于 e?

的元素 returns

谢谢

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

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

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

如果你做过那件可怕的事情,那么推出你自己的函数来做这件事并不难:

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

有内置的吗?不,可能是因为如果您已经知道要删除的元素,那么为什么还要返回它呢?1

你能做的最好的事情就是获取索引,然后弹出它。最终,这没什么大不了的——链接 2 个 O(n) 算法仍然是 O(n),所以你仍然可以大致相同地扩展......

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

1当然,在某些病态情况下,退回的物品可能不是您已经知道的物品……但它们还不够重要保证一种只需要 3 行就可以自己编写的新方法:-)

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

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))