删除多个元素而不更新直到结束

Joh*_*ith 3 python list

我有两个清单:

list_a = [1,5,8]
list_b = [12,4,2,5,7,5,3,6,8]
Run Code Online (Sandbox Code Playgroud)

元素list_a对应于元素的索引list_b.两个列表的大小都大于100.

如何删除list_b其索引所在的元素list_a,因此如果您获取上面的列表,结果列表是[12,2,5,7,3,6]

Mar*_*ers 9

两种选择:

  • 使用列表推导创建新列表:

    newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
    
    Run Code Online (Sandbox Code Playgroud)

    如果indices_to_delete是这样的话会更快set:

    indices_to_delete = set(indices_to_delete)
    newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
    
    Run Code Online (Sandbox Code Playgroud)

    因为集合中的成员资格测试是列表中的O(1)与O(n).

  • 从列表中就地按反向排序顺序删除索引:

    for index in sorted(indices_to_delete, reversed=True):
        del oldlist[index]
    
    Run Code Online (Sandbox Code Playgroud)

    如果按反向排序顺序删除项目,则具有较高索引的项目将被移除,因为具有较低索引的项目将被删除,而其余indices_to_delete项目不再与您需要删除的项目匹配.