一次删除Python列表中的多个元素

时间:2019-01-17 03:29:12

标签: list python-3.6 python-3.5 python-3.4 remove-method

(使用Python 3)

给出以下名为numList的列表:[1,1,2,2,3,3,3,4]。 我想从numList中删除“ 1”和“ 3”的一个实例。 换句话说,我想要一个将numList转换为[1,2,2,3,3,4]的函数。 每个我要删除的元素,什么函数可以让我从Python列表中删除X个元素? (我要删除的元素保证在列表中存在)

为清楚起见,我将给出更多示例:

[1,2,3,3,4] 删除2和3 [1,3,4]

[3,3,3] 删除3 [3,3]

[1,1,2,2,3,4,4,4,4] 删除2、3和4 [1,1,2,4,4,4]

我尝试这样做:

numList = [1,2,2,3,3,4,4,4]

remList = [2,3,4]

对于remList中的x:

 numList.remove(x)

这将numList转换为[1,2,3,4,4],这是我想要的。但是,这具有以下复杂性:

O((len(numList))^(len(remList)))

这是一个问题,因为remList和numList的长度可以为10 ^ 5。该程序将需要很长时间才能运行。有内置的功能可以更快地完成我想要的吗?

此外,我更喜欢可以在空间和时间方面做到这一点的最佳功能,因为该程序需要在不到一秒钟的时间内运行,并且列表的大小很大。

1 个答案:

答案 0 :(得分:0)

您的方法:

for x in rem_list:
    num_list.remove(x)

是直觉的,除非列表很大,否则我可能会这样做,因为它易于阅读。

一种选择是:

result = []
for x in num_list:
    if x in rem_list:
        rem_list.remove(x)
    else:
        result.append(x)

如果len(rem_list)

如果保证rem_list不包含任何重复项(根据您的示例),则可以使用集合,而复杂度为O(len(num_list))。