删除子集

问题描述 投票:-2回答:1

我有两个列表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) 但它不工作。有什么帮助吗?

python list subset
1个回答
1
投票

集合工作在值上,而不是前缀,所以...。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]

1
投票

你可以用:

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)]

演示

© www.soinside.com 2019 - 2024. All rights reserved.