代码之家  ›  专栏  ›  技术社区  ›  Sharvari Gc

用python在三个重叠集合中查找delta

  •  1
  • Sharvari Gc  · 技术社区  · 6 年前
    x = [1,2,3,4,5,6,7]
    y = [2,1,4,5,8,10]
    z = [7,1,3,6,0]
    

    如何在这三个列表的venn图中找到所有元素(或者我甚至可以使用集合)

    enter image description here

    我正在处理500-1000的数据帧。我尝试使用数据帧的条件子集。 在python中是否有一种更简单、更简单的方法? 我对集合、numpy数组甚至列表都是开放的。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Sharvari Gc    6 年前

    鉴于:

    x = [1,2,3,4,5,6,7]
    y = [2,1,4,5,8,10]
    z = [7,1,3,6,0]
    

    尝试:

    x = set([1,2,3,4,5,6,7])
    y = set([2,1,4,5,8,10])
    z = set([7,1,3,6,0])
    

    然后,您可以通过以下方式找到交点:

    xy = x.intersection(y)
    xyz = x.intersection(y).intersection(z)
    # and
    xyz = x & y & z
    

    参见: https://docs.python.org/2/library/sets.html#set-objects

    所有三角洲:

    我用“x”代表“不在x”

    x_y_z = z.difference(x).difference(y)
    x_yz_ = y.difference(x).difference(z)
    x_yz = y.intersection(z).difference(x)
    xy_z_ = x.difference(y).difference(z)
    xy_z = x.difference(y).intersection(z)
    xyz_ = x.intersection(y).difference(z)
    xyz = x.intersection(y).intersection(z)
    
        2
  •  0
  •   Sharvari Gc    6 年前

    根据@pascalvkooten的答案,我编写了代码来查找任意三个集合之间的所有delta。

    所有三角洲:

    我用“x”代表“不在x”

    x_y_z = z.difference(x).difference(y)
    x_yz_ = y.difference(x).difference(z)
    x_yz = y.intersection(z).difference(x)
    xy_z_ = x.difference(y).difference(z)
    xy_z = x.difference(y).intersection(z)
    xyz_ = x.intersection(y).difference(z)
    xyz = x.intersection(y).intersection(z)
    

    使用以下方法测试代码: 每个结果集的交集应为空集。

    x_y_z.intersection(x_yz_).
    intersection(x_yz).\
    intersection(xy_z).\
    intersection(xy_z_).\
    intersection(xy_z).\
    intersection(xyz_).\
    intersection(xyz)
    
    1. 结果集的并集应等于三个集的并集。

      x_y_z.联合(x_yz_u).联合(xy_z_u).联合(xy_z_u).\ 并集(x y z)==x.union(y.union(z)'