【发布时间】:2016-03-09 12:47:59
【问题描述】:
我有两个非常大的整数列表:list1 和 list2。
在list1 我有list2 的索引(有些是无效的),我需要从list2 中删除这些索引中的元素。
这是我的代码:
for index in list1:
if index >= 0 and index < len(list2): # verify index is valid
list2.pop(index)
这是可行的,但我想要一个比这更快的解决方案。是否可以?也许使用numpy?
【问题讨论】:
-
您应该小心删除列表元素。我会导致很多问题。
-
如果你可以牺牲内存来换取速度,你可以简单地创建一个带有理解的新列表。几乎总是最快的选择。
-
为什么@MarkyPython有问题?
-
比如说我希望遍历一个列表并删除所有少于 3 个字符的元素。如果我要在遍历列表时删除项目,那么每次我删除一个元素时,列表元素都会“向左移动”一个索引。因此,如果我在迭代期间删除索引 3 处的项目,那么在下一次迭代中,它将检查索引 4 处的项目。由于我们删除了项目 3 并导致元素向左“移位”,项目 4 变成了项目 3,现在当我们检查第 4 项时,它实际上是原始列表中的第 5 项,因此我们跳过了原始列表中的第 4 项。