如何从其他列表中删除列表?

时间:2016-05-12 14:28:54

标签: python python-2.7

我有类似的东西:

a = [4,3,1,6,3,5,3]
b = [4,2,6]

我想从a中删除b的3个元素。我试图这样做:

c = a - b

但我认为合并的反转(+)可能不是一件事,并且是正确的:不支持的操作数类型 - :list和list 。我正在考虑绕过它们,但这听起来并不真实。

我的最终状态将是:c = [3,1,3,5,3]

如果你没有注意到,b不是a的子集,而且这些是无序的。 2个不同的集合,这些集合也不是唯一的,但只想删除每个i in b的1个实例,而不是i in b的所有实例

编辑目前的答案似乎无法解决我的问题。

a = [1,1,2,2,2,3,4,5]
b = [1,3]
c = [x for x in a if x not in b]
#c result is [2,2,2,4,5]

我希望c返回:[1,2,2,2,4,5]

为了速度打字,我只是把已排序的数字放在一起,但是这些列表并非未分类,但为了清洁起见,我们可以对它们进行排序。

它们只是在init处未分类。 由于列表项中有重复项,因此我无法根据set的定义使用集合。

4 个答案:

答案 0 :(得分:8)

您可以使用以下代码:

[x for x in a if x not in b]

答案 1 :(得分:2)

由于输入和输出列表是无序的,因此使用Counter是一种方法:

randomForest(decision~.,data=input)

此解决方案处理以下情况与ysearka answer不同:

from collections import Counter

a = [4,3,1,6,3,5,3]
b = [4,2,6]
c = list((Counter(a) - Counter(b)).elements())

print(c)

此处的许多答案会导致a = [4,3,1,6,3,5,3] b = [3] ,使用计数器的答案会输出c = [4,1,6,5]

此行为也由DAXaholic answer实现,但修改了现有列表,这不是一种pythonic方式,并且在大型列表上可能代价高昂。

答案 2 :(得分:1)

如您所述,您每次只想删除一次项目:

for x in [tmp for tmp in b if tmp in a]:
        a.remove(x)

答案 3 :(得分:0)

for x in b:
    while x in a:
        a.remove(x)

现在a

[3, 1, 3, 5, 3]