8

刚刚注意到 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 -- 删除并返回 index 处的项目

4

3 回答 3

3

使用list.pop

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

根据文档:

s.pop([i])

与 x = 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]
于 2013-08-04T14:32:01.447 回答
1

这是一个很好的 Pythonic 方法,使用列表推导enumerate(注意它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]
于 2014-08-19T16:04:28.703 回答
0

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

于 2013-08-06T05:44:08.180 回答