【问题标题】:Remove Multiple Elements in a Python List Once一次删除 Python 列表中的多个元素
【发布时间】:2019-06-11 05:17:38
【问题描述】:

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

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

【问题讨论】:

  • for i in (2, 3): numList.remove(i)
  • 我在这个问题上添加了我的尝试。

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


【解决方案1】:

你的方法:

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))。

【讨论】:

  • 它仍然是 O(n^n) 复杂度。在最坏的情况下,两个列表的长度相同(即 10^5)
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多