(使用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。该程序将需要很长时间才能运行。有内置的功能可以更快地完成我想要的吗?
此外,我更喜欢可以在空间和时间方面做到这一点的最佳功能,因为该程序需要在不到一秒钟的时间内运行,并且列表的大小很大。
答案 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))。