使用 Python 从索引列表中删除多个元素

Remove multiple elements from a list of index with Python

我有一个值列表和一个索引列表,我需要删除索引指向的元素。

这是我的解决方案,但我不喜欢这个实现,因为它需要导入包,当值包含 maxint 时不起作用,并且多次迭代这些值。

def remove_abnormalities(values, indices):
    v = list(values)
    for i in indices:
        v[i] = sys.maxint
    return filter(lambda i: i != sys.maxint, v)

有更好的解决方案吗?

这应该有效:

def remove_abnormalities(values, indices):
    return [val for i, val in enumerate(values) if i not in indices]

此外,如果索引数量很大,您可以在过滤前将 indices 转换为集合以获得更高的性能。

这是一个仅使用内置列表方法的版本。

它相当天真,所以可能有更快的解决方案,但不需要额外的包等,这可能正是您所需要的。

def remove_abnormalities(values, indices):
    list = []
    for i in range(len(values)):
        if i not in indices:
           list.append(values[i])
    return list

print(remove_abnormalities(["A","B","C","D","E","F","G","H"],[1,3,5]))
#output is ['A', 'C', 'E', 'G', 'H']

如果有其他 Python 专家愿意建议 edits/optimizations 使用此功能,请随意。

编辑

我尝试在花哨的和我天真的实现中都使用 timeit 函数,它们不是决定性的,但一个似乎并不比另一个快。不过,这是在解释器中手动完成的。无法使脚本运行。就性能而言,它们相差不大。不过,如果有人能证明我是错的,我不介意!