繁体   English   中英

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

[英]How to remove and return element in python list

在python中,您可以执行list.pop(i)来删除并返回索引i中的元素,但是是否存在像list.remove(e)这样的内置函数在其中删除并返回了等于e的第一个元素?

谢谢

我的意思是,有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个O(n)算法仍然是O(n),因此您的缩放比例仍然大致相同...

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

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为true,但e is a为false,并且您确实需要a而不是e时才有意义。

不过,在大多数情况下,我会说这暗示您的代码中有可疑之处。

一个简短的版本是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM