Skip to main content
 首页 » 编程设计

Python之list.remove(x) 的替代品

2025年05月04日8qlqwjy

我想比较两个列表。通常这不是问题,因为我通常使用嵌套 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 将始终 列表列表的假设下有效.