在Python中,计算两个列表之间差异的最佳方法是什么?
例
A = [1,2,3,4]
B = [2,5]
A - B = [1,3,4]
B - A = [5]
Run Code Online (Sandbox Code Playgroud) 给定列表a = [1, 2, 2, 3]及其子列表b = [1, 2]找到一个以这样的方式补充b的列表sorted(a) == sorted(b + complement).在上面的例子中,complement将是一个列表[2, 3].
使用列表理解是很诱人的:
complement = [x for x in a if x not in b]
Run Code Online (Sandbox Code Playgroud)
或套装:
complement = list(set(a) - set(b))
Run Code Online (Sandbox Code Playgroud)
但是,这两种方式都会回归complement = [3].
一个显而易见的方法是:
complement = a[:]
for element in b:
complement.remove(element)
Run Code Online (Sandbox Code Playgroud)
但这感觉非常不满意,而且不是非常Pythonic.我错过了一个明显的习语还是这样?
正如下面指出的那样,性能O(n^2)是否有更有效的方法?
假设我有一个字符串列表:
A B C D
然后是另一个字符串列表
B,C,d
我想知道第一个列表中哪些元素不在第二个列表中,因此结果将是A.
我不知道扩展方法的名称是这样做的.我知道我可以使用concat,union,intersect进行类似的列表比较,但只是不知道完成这个特定任务的名称.
附录,我对重复项感兴趣,所以如果第一个列表是:
A,A,A,B,C,d
第二个清单是
B,C,d
我想得到
A,A,A
谢谢!