-1

(使用 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。该程序将需要很长时间才能运行。是否有内置功能可以更快地完成我想要的操作?

另外,我更喜欢可以在空间和时间方面完成这项工作的最佳功能,因为程序需要在不到一秒的时间内运行并且列表的大小很大。

4

1 回答 1

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) < len(num_list),这将是 O(len(rem_list) ^ len(num_list)) 并且比第一个解决方案更快。

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

于 2019-01-17T07:07:14.567 回答