我有两个列表A和B。
我想从B中删除所有以A的(x,y)开头的子集。例如,如果我有
A = [(1,2), (1,3), (1,5)]
B = [(1,2,10), (1,2,20), (1,3,2), (2,6,2)]
我想把B修改为 [(2,6,2)]
我试过了 B = set(B) - set(A)
但它不工作。有什么帮助吗?
集合工作在值上,而不是前缀,所以...。set(B) - set(A)
是差之毫厘谬以千里的。
让我们来逐步思考一下这个问题:通过迭代处理 B
并过滤掉任何前缀与在 A
. 作为一个列表理解,会是这样的。
[y for y in B if not any(x == y[:len(x)] for x in A)]
如果这个列表中的项目 A
将永远有长度2,你可以简化。
[y for y in B if y[:2] not in A]
你可以用:
a = [(1,2), (1,3), (1,5)]
b = [(1,2,10), (1,2,20), (1,3,2), (2,6,2)]
b = [x for x in b if x[0:2] not in a]
# [(2, 6, 2)]