从lis中删除多个元素

2024-04-26 02:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以同时从列表中删除多个元素?如果我想删除索引0和2处的元素,然后尝试del somelist[0],然后是del somelist[2],那么第二条语句实际上将删除somelist[3]

我想我可以先删除编号较高的元素,但我希望有更好的方法。


Tags: 方法元素列表语句编号delsomelist
3条回答

不知为什么我不喜欢这里的任何答案。 是的,它们可以工作,但严格地说,它们中的大多数并没有删除列表中的元素,是吗?(但要做一份拷贝,然后用编辑过的拷贝替换原来的拷贝)。

为什么不先删除较高的索引呢?

这是有原因的吗? 我只想:

for i in sorted(indices, reverse=True):
    del somelist[i]

如果您真的不想向后删除项,那么我想您应该取消增加大于上次删除的索引的索引值(由于您有不同的列表,因此不能真正使用相同的索引)或使用列表的副本(这不是“删除”,而是用已编辑的副本替换原始索引)。

我是不是遗漏了什么,有什么理由不按相反的顺序删除吗?

可能不是解决这个问题的最佳方法:

indices = 0, 2
somelist = [i for j, i in enumerate(somelist) if j not in indices]

如果您要删除多个非相邻项,那么您描述的是最好的方法(是的,请确保从最高索引开始)。

如果项目相邻,则可以使用切片分配语法:

a[2:10] = []

相关问题 更多 >