如何按索引从列表中删除元素?
我找到了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
其他回答
如前所述,最佳实践是del();或pop(),如果需要知道值。
另一种解决方案是仅重新堆叠所需的元素:
a = ['a', 'b', 'c', 'd']
def remove_element(list_,index_):
clipboard = []
for i in range(len(list_)):
if i is not index_:
clipboard.append(list_[i])
return clipboard
print(remove_element(a,2))
>> ['a', 'b', 'd']
eta:hmm……不会处理负指数值,会思考并更新
我想是吧
if index_<0:index_=len(list_)+index_
会修补它…但突然间这个想法似乎很脆弱。有趣的思想实验。似乎应该有一种“正确”的方法来实现append()/list理解。
思考
可以使用del或pop,但我更喜欢del,因为您可以指定索引和切片,让用户对数据有更多的控制。
例如,从所示的列表开始,可以使用del作为切片删除其最后一个元素,然后可以使用pop从结果中删除最后一个。
>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]
这取决于你想做什么。
如果要返回删除的元素,请使用pop():
>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]
但是,如果您只想删除一个元素,请使用del:
>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]
此外,del允许您使用切片(例如del[2:])。
您可以只搜索要删除的项目。这真的很简单。例子:
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
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]