在python 2.7中从数字列表中删除一组索引的最有效方法是什么?


问题内容

因此,我想知道如何使用Python 2.7最有效地获取用于表示像这样的索引的值的列表:(但长度不能超过250,000+)

indices = [2, 4, 5]

并从较大的列表中删除该索引列表,如下所示:(3,000,000+项)

numbers = [2, 6, 12, 20, 24, 40, 42, 51]

得到这样的结果:

[2, 6, 20, 42, 51]

我在寻找一种有效的解决方案,而不是其他任何事情。我知道有很多方法可以做到这一点,但这不是我的问题。效率是。同样,此操作将必须执行多次,并且列表都将成倍减小。我没有方程式来表示随着时间的推移它们将变小多少。

编辑:

数字必须始终保持在列表中排序,或者在删除索引后返回到排序状态。称为索引的列表可以排序也可以不排序。它甚至不必在列表中。


问题答案:

我怀疑在索引之间取整片可能比列表理解要快

def remove_indices(numbers, indices):
    result = []
    i=0
    for j in sorted(indices):
        result += numbers[i:j]
        i = j+1
    result += numbers[i:]
    return result