我有类似的东西:
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的定义使用集合。
答案 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]