给定列表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)是否有更有效的方法?