如何按索引从列表中删除元素?

我找到了list.remove(),但这会缓慢地按值扫描列表中的项。


当前回答

您可以使用del或pop根据索引从列表中删除元素。Pop将打印从列表中删除的成员,而列表将删除该成员而不打印。

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

其他回答

你可能想要pop:

a = ['a', 'b', 'c', 'd']
a.pop(1)

# now a is ['a', 'c', 'd']

默认情况下,不带任何参数的pop将删除最后一项:

a = ['a', 'b', 'c', 'd']
a.pop()

# now a is ['a', 'b', 'c']

如果要删除列表中特定位置的元素,如第2、第3和第7个元素,则不能使用

del my_list[2]
del my_list[3]
del my_list[7]

因为在删除第二个元素之后,您删除的第三个元素实际上是原始列表中的第四个元素。您可以过滤原始列表中的第2、第3和第7个元素,并获得一个新列表,如下所示:

new_list = [j for i, j in enumerate(my_list) if i not in [2, 3, 7]]

您可以只搜索要删除的项目。这真的很简单。例子:

    letters = ["a", "b", "c", "d", "e"]
    letters.remove(letters[1])
    print(*letters) # Used with a * to make it unpack you don't have to (Python 3.x or newer)

输出:a c d e

使用del语句:

del listName[-N]

例如,如果要删除最后3项,则代码应为:

del listName[-3:]

例如,如果要删除最后8项,则代码应为:

del listName[-8:]

已经提到了如何从列表中删除单个元素,以及不同的方法有哪些优点。但是,请注意,删除多个元素可能会出错:

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in indices:
...     del l[i]
... 
>>> l
[0, 1, 2, 4, 5, 6, 7, 9]

原始列表的元素3和8(而不是3和7)已被删除(因为列表在循环过程中被缩短),这可能不是本意。如果您希望安全地删除多个索引,则应首先删除索引最高的元素,例如:

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in sorted(indices, reverse=True):
...     del l[i]
... 
>>> l
[0, 1, 2, 4, 5, 6, 8, 9]