我想比较两个列表。通常这不是问题,因为我通常使用嵌套 for 循环并将交集附加到新列表。在这种情况下,我需要从 A 中删除 A 和 B 的交集。
A = [['ab', 'cd', 'ef', '0', '567'], ['ghy5'], ['pop', 'eye']]
B = [['ab'], ['hi'], ['op'], ['ej']]
我的目标是比较 A 和 B 并从 A 中删除 A 交集 B,即在这种情况下删除 A[0][0]。
我试过:
def match():
for i in A:
for j in i:
for k in B:
for v in k:
if j == v:
A.remove(j)
list.remove(x) 抛出 ValueError。
请您参考如下方法:
如果可能(意思是如果顺序和你有“子列表”的事实无关紧要),我会先 flatten the lists , 创建 sets然后您可以轻松地从 A 中删除 B 中的元素:
>>> from itertools import chain
>>> A = [['ab', 'cd', 'ef', '0', '567'], ['ghy5'], ['pop', 'eye']]
>>> B = [['ab'], ['hi'], ['op'], ['ej']]
>>> A = set(chain(*A))
>>> B = set(chain(*B))
>>> A-B
set(['ghy5', 'eye', 'ef', 'pop', 'cd', '0', '567'])
或者如果 A 的顺序和结构很重要,您可以这样做(感谢并归功于 THC4k ):
>>> remove = set(chain(*B))
>>> A = [[x for x in S if x not in remove] for S in A].
但请注意:这仅在A 和B 将始终 列表列表的假设下有效.
