在Python中使用索引删除项目的就地函数

时间:2013-08-04 14:30:47

标签: python list chaining

注意到Python中没有函数可以通过索引删除列表中的项目,以便在链接时使用。

例如,我正在寻找类似的东西:

another_list = list_of_items.remove[item-index]

而不是

del list_of_items[item_index]

因为,remove(item_in_list)在删除item_in_list后返回列表;我想知道为什么索引的类似函数被遗漏了。似乎非常明显和微不足道的被包括在内,觉得有理由跳过它。

关于为什么这样的功能不可用的任何想法?

-----编辑-------

list_of_items.pop(item_at_index)不合适,因为如果没有要删除的特定项目,它不返回列表,因此不能用于链接。 (根据文件: L.pop([index]) - > item - 删除并返回索引的项目)

3 个答案:

答案 0 :(得分:2)

使用list.pop

>>> a = [1,2,3,4]
>>> a.pop(2)
3
>>> a
[1, 2, 4]

根据文件:

  

s.pop([I])

     

与x = s [i]相同; del s [i];返回x

<强>更新

对于链接,您可以使用以下技巧。 (使用包含原始列表的临时序列):

>>> a = [1,2,3,4]
>>> [a.pop(2), a][1] # Remove the 3rd element of a and 'return' a
[1, 2, 4]
>>> a # Notice that a is changed
[1, 2, 4]

答案 1 :(得分:1)

使用list comprehensionsenumerate这是一种不错的Pythonic方法(注意enumerate为零索引):

>>> y = [3,4,5,6]
>>> [x for i, x in enumerate(y) if i != 1] # remove the second element
[3, 5, 6]

这种方法的优点是你可以同时做几件事:

>>> # remove the first and second elements
>>> [x for i, x in enumerate(y) if i != 0 and i != 1]
[5, 6]
>>> # remove the first element and all instances of 6
>>> [x for i, x in enumerate(y) if i != 0 and x != 6]
[4, 5]

答案 2 :(得分:0)

正如Martijn Pieters在该问题的评论中所指出的那样,这并未实现为: Python就地操作,通常会返回None,而不是更改的对象。