python中的Set操作

python中的Set操作,python,list,Python,List,我有两个对象列表,例如 L1 = [2,3,4] L2 = [1,2] 我想要两个不同的列表 1) 匹配项 2) 不匹配项 我可以得到匹配的元素#1,如下所示 match = [x for x in L1 if x in L2] 但是如何才能有效地获取不匹配的元素呢 我可以在中使用not,但是否有其他方法可以做到这一点 谢谢,您可以使用各种set方法,如、、 您可以使用match获得它: no_match = [x for x in L1 + L2 if x not in match] 有

我有两个对象列表,例如

L1 = [2,3,4]
L2 = [1,2]
我想要两个不同的列表

1) 匹配项 2) 不匹配项

我可以得到匹配的元素#1,如下所示

match = [x for x in L1 if x in L2]
但是如何才能有效地获取不匹配的元素呢

我可以在中使用not,但是否有其他方法可以做到这一点


谢谢,

您可以使用各种
set
方法,如、、


您可以使用
match
获得它:

no_match = [x for x in L1 + L2 if x not in match]
有一种可能性:

not_match=[x for x in L1 if x not in L2] + [x for x in L2 if x not in L1]
  • 集合是获取匹配项和非匹配项的最佳方式
  • 按列表压缩:

    >>> L1 = [2,3,4]
    >>> L2 = [1,2]
    >>> [i for i in L1 if i not in  L2]
    [3, 4]
    >>> [i for i in L1 if i in L2]
    [2]
    >>> [i for x in L2 if i not in L1]
    [1]
    >>> [i for i in L1 if i not in  L2] +  [i for i in L2 if i not in L1]
    [3, 4, 1]
    

    我认为你们可以利用它,它基本上有无序的不同元素。我还鼓励您尝试使用速记法来执行操作
    联合
    交叉
    ,以及
    差异

    >>> s1 = set(L1)
    >>> s2 = set(L2)
    >>> s1 | s2 # union
    {1, 2, 3, 4}
    >>> s1 & s2 # intersection
    {2}
    >>> s1 - s2 # difference
    {3, 4}
    >>> s1 ^ s2 # symmetric difference
    {1, 3, 4}
    
    从数学角度复习集合运算 假设
    A
    B
    是集合

    • A和B的并集
      A的集合∪B={x:x∈ A或x∈ B} 
    • A和B的交点
      A的集合∩B={x:x∈ A和x∈ B} 
    • A和B的差异是集合
      A-B={x:x∈ A和x∉ B} 
    • A和B的对称差是集合
      A∆B=A∪B-A∩B

    啊,你救了我。我忘了这个…:(@padraiccnningham no.我只想要一种有效的方法。有没有一种方法可以在一次迭代中同时获得匹配和不匹配,这意味着不需要使用两个循环,比如,match,not_match=[something]@回溯查看
    >>> s1 = set(L1)
    >>> s2 = set(L2)
    >>> s1 | s2 # union
    {1, 2, 3, 4}
    >>> s1 & s2 # intersection
    {2}
    >>> s1 - s2 # difference
    {3, 4}
    >>> s1 ^ s2 # symmetric difference
    {1, 3, 4}