在python中,你可以做list.pop(i),删除并返回索引i中的元素,但是有一个内置函数,如list.remove(e),它删除并返回第一个等于e的元素?
由于
答案 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))