如何按索引从列表中删除元素?
我找到了list.remove(),但这会缓慢地按值扫描列表中的项。
如何按索引从列表中删除元素?
我找到了list.remove(),但这会缓慢地按值扫描列表中的项。
当前回答
您可以只搜索要删除的项目。这真的很简单。例子:
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
其他回答
如果要删除列表中特定位置的元素,如第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]]
l-值列表;我们必须从inds2rem列表中删除索引。
l = range(20)
inds2rem = [2,5,1,7]
map(lambda x: l.pop(x), sorted(inds2rem, key = lambda x:-x))
>>> l
[0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
或者如果应删除多个索引:
print([v for i,v in enumerate(your_list) if i not in list_of_unwanted_indexes])
当然,也可以这样做:
print([v for i,v in enumerate(your_list) if i != unwanted_index])
已经提到了如何从列表中删除单个元素,以及不同的方法有哪些优点。但是,请注意,删除多个元素可能会出错:
>>> 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]
这听起来不像你在处理一个列表,所以我会保持简短。您希望使用pop,因为它将删除元素而不是列表元素,因此应该使用del。要调用python中的最后一个元素,它是“-1”
>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']