Python 删除两个列表中具有相同元素的元组

Python 删除两个列表中具有相同元素的元组,python,Python,基本上,对于每个列表,如果另一个列表中的某个元组具有与之相同的元素,则从两个列表中删除所有具有此元素的元组 (我使用的是集合而不是元组,但代码中的某个地方出现了一个错误 说明:unhable类型:“set”,所以我将其更改为tuples…) 这给了a=['a'],b=['-b'],有更好的方法(可能是一些简单的内置函数)来做同样的事情吗 更多例子 res=[] for i in a: for j in b: if type(i) == tuple and type(j)

基本上,对于每个列表,如果另一个列表中的某个元组具有与之相同的元素,则从两个列表中删除所有具有此元素的元组

(我使用的是集合而不是元组,但代码中的某个地方出现了一个错误
说明:unhable类型:“set”,所以我将其更改为tuples…)

这给了
a=['a'],b=['-b']
,有更好的方法(可能是一些简单的内置函数)来做同样的事情吗


更多例子

res=[]
for i in a:
    for j in b:
        if type(i) == tuple and type(j) == tuple:
            if i[0] in j and i[1] in j:
                res.append(i)
                res.append(j)
a,b=list(set(a)-set(res)),list(set(b)-set(res))
print(a,b)

在子项上使用
frozenset
,您将能够使用
set。差异

>>>a=['-a', ('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
>>>b=['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

>a=['a'],b=['-b']

>>>a=['-a', ('a', 'b'),('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
>>>b=['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

>a=['a',('a', 'b')],b=['-b']
印刷品:

a = ['-a', ('a', 'b'),('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
b = ['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

seta = {frozenset(i) if isinstance(i, tuple) else i for i in a}
setb = {frozenset(i) if isinstance(i, tuple) else i for i in b}
print(seta - setb, setb - seta)

我之所以这么说,是因为你说你以前用过集合,但有问题。您始终可以将冻结集恢复为元组。

对子项使用
冻结集
,您将能够使用
集。差异

>>>a=['-a', ('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
>>>b=['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

>a=['a'],b=['-b']

>>>a=['-a', ('a', 'b'),('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
>>>b=['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

>a=['a',('a', 'b')],b=['-b']
印刷品:

a = ['-a', ('a', 'b'),('-c', 'd'), ('-d', 'c'), ('-d', 'c')]
b = ['-b', ('c', '-d'), ('d', '-c'), ('-d', 'c')]

seta = {frozenset(i) if isinstance(i, tuple) else i for i in a}
setb = {frozenset(i) if isinstance(i, tuple) else i for i in b}
print(seta - setb, setb - seta)

我之所以这么说,是因为你说你以前用过集合,但有问题。您始终可以将冻结集恢复为tuple。

请找到以下答案。基本上,你只需要先找出重复的

{'-a', frozenset({'a', 'b'})} {'-b'}

请找到下面的答案。基本上,你只需要先找出重复的

{'-a', frozenset({'a', 'b'})} {'-b'}

当a=['-a',('a','b'),('-c','d'),('-d','c'),('-d','c')]b=['-b',('c','-d'),('d','c'),('-d','c')]时,它给出了['-a',('a','b'),('-c','d')]['-b',('c','d'),('d','d')是的。预计会有这样的结果。正当我以为你想删除两个输入列表中的所有公共元组?是吗?当a=['-a',('a','b'),('-c','d'),('-d','c'),('-d','c')]b=['-b',('c','-d'),('d','-c'),('-d','c')]时,它给出了['-a',('a','b'),('-c','d')]['-b',('c','d','d'),('d','d'-c')是的。预计会有这样的结果。正当我以为你想删除两个输入列表中的所有公共元组?不是吗?