Python从另一个字符串列表中减去字符串列表
我想减去一个字符串列表,其中有多个相同元素(因此集合操作没有用处) 例如:Python从另一个字符串列表中减去字符串列表,python,string,list,list-comprehension,Python,String,List,List Comprehension,我想减去一个字符串列表,其中有多个相同元素(因此集合操作没有用处) 例如: C = ['A','B','B'] D = ['B'] 我想要一种方法来做到这一点: C - D = ['A','B'] 到目前为止,我得到的例子,但没有给出我想要的结果 [item for item in C if item not in D] returns: ['A'] 下面是一个更详细的示例来说明我想要什么: 这就是我想要的结果: C - D = ['A', 'A', 'B', 'B','B','X']
C = ['A','B','B']
D = ['B']
我想要一种方法来做到这一点:
C - D = ['A','B']
到目前为止,我得到的例子,但没有给出我想要的结果
[item for item in C if item not in D]
returns: ['A']
下面是一个更详细的示例来说明我想要什么:
这就是我想要的结果:
C - D = ['A', 'A', 'B', 'B','B','X']
您可以使用集合中的计数器:
from collections import Counter
C_D = [i for v,c in (Counter(C)-Counter(D)).items() for i in v*c]
不使用任何库:
output = [x for x in C if not x in D or D.remove(x)]
//output: ['A', 'B']
虽然Alain T.的方法还可以,但有一种更好的方法使用
计数器
:
from collections import Counter
C = ['A','B','B']
D = ['B']
result = list((Counter(C) - Counter(D)).elements())
您可以尝试以下方法:
C = ['A','B', 'A','A','B','B','B','X','B']
D = ['A','B','B','Y']
res = [ i for i in C ]
for i in D:
if i in C:
res.remove(i)
print(res)
可能重复聪明地使用remove()的None return()+1这种方式似乎会以某种方式改变结果——如果我多次运行它,它会在结果中添加一个额外的B。不确定会发生什么,但有些事情并没有按照我的预期或希望的那样进行。当我们使用列表理解时,上面的解决方案是有效的(确保有D.remove(x)检查)。然而,当我们在没有列表理解的情况下实现相同的逻辑时,我很困惑地看到它是如何产生完全不同的结果的。当我们从中移除D,移除(x)以得到预期的答案时,也很麻烦。我猜这与列表理解中的“或”操作符实现有关。现在是凌晨2:30,我明天早上会挖得更深。我会接受“阿兰”It’这是一天中的任何时候。
C = ['A','B', 'A','A','B','B','B','X','B']
D = ['A','B','B','Y']
res = [ i for i in C ]
for i in D:
if i in C:
res.remove(i)
print(res)