# Python实现求多个集合之间并集的方法

​目的：求多个集合之前的并集，例如：现有四个集合C1 = {11, 22, 13, 14}、C2 = {11, 32, 23, 14, 35}、C3 = {11, 22, 38}、C4 = {11, 22, 33, 14, 55, 66}，则它们之间的并集应该为：

C1 & C2 & C3 = {

11}、C1 & C2 & C4 = {

14}、C1 & C3 & C4 = {

22}。


（1）先求4个集合共有的成员；

（2）每个集合减去所有集合的共有成员，在求其中任意3个集合共有的成员；

（3）每个集合减去包含自己的任意三个集合的共有成员，最后求其中任意两个集合共有的成员。

# encoding: utf-8

def func(content):
# 使用集合实现， 使用集合真是太方便了

c1 = set(content[0])  # [11, 22, 13, 14]
c2 = set(content[1])  # [11, 32, 23, 14, 35]
c3 = set(content[2])  # [11, 22, 38]
c4 = set(content[3])  # [11, 22, 33, 14, 55, 66]

# all collections have element
all_union_elems = c1 & c2 & c3 & c4
if all_union_elems:
print ('all collections have elems: ', all_union_elems)

# three collections have
c1 = c1 - all_union_elems
c2 = c2 - all_union_elems
c3 = c3 - all_union_elems
c4 = c4 - all_union_elems
c123_union_elems = c1 & c2 & c3
c124_union_elems = c1 & c2 & c4
c134_union_elems = c1 & c3 & c4
c234_union_elems = c2 & c3 & c4
if c123_union_elems:
print ("c123_union_elems ", c123_union_elems)
if c124_union_elems:
print ("c124_union_elems ", c124_union_elems)
if c134_union_elems:
print ("c134_union_elems ", c134_union_elems)
if c234_union_elems:
print ("c234_union_elems ", c234_union_elems)

# two collections have
c1 = c1 - c123_union_elems - c124_union_elems - c134_union_elems
c2 = c2 - c123_union_elems - c124_union_elems - c234_union_elems
c3 = c3 - c123_union_elems - c134_union_elems - c234_union_elems
c4 = c4 - c124_union_elems - c134_union_elems - c234_union_elems
c12_union_have = c1 & c2
c13_union_have = c1 & c3
c14_union_have = c1 & c4
c23_union_have = c2 & c3
c24_union_have = c2 & c4
c34_union_have = c3 & c4
if c12_union_have:
print ("c12_union_have ", c12_union_have)
if c13_union_have:
print ("c13_union_have ", c13_union_have)
if c14_union_have:
print ("c14_union_have ", c14_union_have)
if c23_union_have:
print ("c23_union_have ", c23_union_have)
if c24_union_have:
print ("c24_union_have ", c24_union_have)
if c34_union_have:
print ("c34_union_have ", c34_union_have)

c1 = c1 - c12_union_have - c13_union_have - c14_union_have
c2 = c2 - c12_union_have - c23_union_have - c24_union_have
c3 = c3 - c13_union_have - c23_union_have - c34_union_have
c4 = c4 - c14_union_have - c24_union_have - c34_union_have
if c1:
print ('only c1 have ', c1)
if c2:
print ('only c2 have ', c2)
if c3:
print ('only c3 have ', c3)
if c4:
print ('only c4 have ', c4)

if __name__ == "__main__":

content = [[11, 22, 13, 14], [11, 32, 23, 14, 35], [11, 22, 38], [11, 22, 33, 14, 55, 66]]

func(content)


all collections have elems:  {

11}
c124_union_elems  {

14}
c134_union_elems  {

22}
only c1 have  {

13}
only c2 have  {

32, 35, 23}
only c3 have  {

38}
only c4 have  {

33, 66, 55}


（1）首先，先找出成员数最多的那个集合，这里就是集合C4；

（2）将集合C4中的每个成员依次和其它集合进行比较，看其它集合中是否包含此成员；

（3）若其它集合中包括这个成员，就将这个成员从集合中去除，依次这样比较每个集合；

（4）比较一轮之后，集合C4中剩余的成员就是只有自己的成员。

（5）再在除C4以外剩下的集合中，找出成员数最多的集合，重复上诉操作。依次类推，就可以求出各集合之间的并集了。

|
16天前
|
Python
python保存两位小数的几种方法，python2保留小数
python保存两位小数的几种方法，python2保留小数
51 2
|
5天前
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中，lambda表达式常用于配合排序函数，实现灵活的数据排序。对于基本列表，可以直接使用sorted()进行升序或降序排序；处理复杂对象如字典列表时，通过lambda指定键值进行排序；同样地，lambda也适用于根据元组的不同位置元素来进行排序。
6 1
|
16天前
|

25 3
|
16天前
|
Python
|
16天前
|
C++ Python
python类方法中使用：修饰符@staticmethod和@classmethod的作用与区别，还有装饰器@property的使用
python类方法中使用：修饰符@staticmethod和@classmethod的作用与区别，还有装饰器@property的使用
11 1
|
16天前
|

python多种方法压缩图片，opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片，opencv、PIL、tinypng、pngquant压缩图片
16 1
|
16天前
|
Python
python的列表的remove()方法、判断if xxx in xx条件比较耗时问题
python的列表的remove()方法、判断if xxx in xx条件比较耗时问题
15 1
|
16天前
|

84 0
|
14天前
|
UED Python

【8月更文挑战第31天】在Python的世界里，魔法方法是那些以双下划线开头和结尾的特殊方法，它们为类提供了丰富的功能。本文将带你走进这些魔法方法的背后，特别是__str__和__repr__，揭示如何通过它们来定制我们的对象在被打印或转换为字符串时的外观。我们将从基础用法开始，逐步深入到高级技巧，包括继承与重写，最终实现一个优雅的字符串表示方案。准备好了吗？让我们开始这段代码之旅吧！
20 0
|
16天前
|
Python
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义，以及*args和**kwargs的使用
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义，以及*args和**kwargs的使用
22 0