Python迭代地将列表拆分为交叉点

Python迭代地将列表拆分为交叉点,python,Python,我试图做的是根据一些列表的公共元素,用它们来自哪个列表的标识符来拆分它们。因此,首先构建一个包含所有列表中所有公共项的列表,然后构建一个包含列表子集中所有公共项的列表,等等 最好用一个例子来解释: list A : [ 2, 4, 6, 8, 10 ] list B : [ 2, 6, 10, 11 , 13 ] list C : [ 3, 6, 8, 9 , 11 ] ===> OUTPUT : ( [ A, B, C ] : [6] ) , ( [ A, B ] : [ 2, 10 ]

我试图做的是根据一些列表的公共元素,用它们来自哪个列表的标识符来拆分它们。因此,首先构建一个包含所有列表中所有公共项的列表,然后构建一个包含列表子集中所有公共项的列表,等等

最好用一个例子来解释:

list A : [ 2, 4, 6, 8, 10 ]
list B : [ 2, 6, 10, 11 , 13 ]
list C : [ 3, 6, 8, 9 , 11 ]
===> OUTPUT :
( [ A, B, C ] : [6] ) ,
( [ A, B ] : [ 2, 10 ] ) ,
( [ A, C ] : [ 8 ] ) 
( [ B, C ] : [ 11 ] ) ,
( [ A ] : [ 4 ] ) ,
( [ B ] : [ 13] ) ,
( [ C ] : [ 3 , 9 ]
我可以在纸上找到解决这个问题的方法:

  • 找到感兴趣的A和B,然后从A和B中删除这些项目。
    A和B=[2,6,10],A=[4,8],B=[11,13]
  • 然后找到
    A&B&C=[6]
    ,现在
    A&B变成了[2,10]
  • 像这样迭代地继续,每次更新我的列表时,使用它们的新内容等

但是上面的内容对我来说并不是那么像Python——我是Python的一个新用户。我可以使用任何库来帮助我这样做吗?我计划使用Python2.7,但如果使用Python3可以帮助我,我可以这样做。

你是在参加编程竞赛还是什么

>>> A=[ 2, 4, 6, 8, 10 ]
>>> B =[ 2, 6, 10, 11 , 13 ]
>>> C =[ 3, 6, 8, 9 , 11 ]
>>> r=set(A+B+C)
>>> l=[[] for i in r]
>>> for index,i in enumerate(r):
    add=[]
    if i in A:
        add.append("a")
    if i in B:
        add.append("b")
    if i in C:
        add.append("c")
    l[index].extend(add)


>>> d={}
>>> for i in r:
    d[i]=0


>>> for index,i in enumerate(d):
    d[i]=l[index]


>>> final={}
>>> for i in d.values():
    final[tuple(i)]=[]


>>> for k,v in d.items():
    final[tuple(v)].append(k)


>>> final
{('c',): [3, 9], ('a',): [4], ('a', 'c'): [8], ('a', 'b'): [2, 10], ('a', 'b', 'c'): [6], ('b', 'c'): [11], ('b',): [13]}
>>> 

你是参加编程比赛还是什么

>>> A=[ 2, 4, 6, 8, 10 ]
>>> B =[ 2, 6, 10, 11 , 13 ]
>>> C =[ 3, 6, 8, 9 , 11 ]
>>> r=set(A+B+C)
>>> l=[[] for i in r]
>>> for index,i in enumerate(r):
    add=[]
    if i in A:
        add.append("a")
    if i in B:
        add.append("b")
    if i in C:
        add.append("c")
    l[index].extend(add)


>>> d={}
>>> for i in r:
    d[i]=0


>>> for index,i in enumerate(d):
    d[i]=l[index]


>>> final={}
>>> for i in d.values():
    final[tuple(i)]=[]


>>> for k,v in d.items():
    final[tuple(v)].append(k)


>>> final
{('c',): [3, 9], ('a',): [4], ('a', 'c'): [8], ('a', 'b'): [2, 10], ('a', 'b', 'c'): [6], ('b', 'c'): [11], ('b',): [13]}
>>> 

我没有足够的声誉来评论,我相信这不是最好的方式,但一个快速的事情可能会有所帮助

如果从将每个列表与字母关联的词典开始:

lists = {
 'A' : [2,4,6,8,10],
 'B' : [2,6,10,11,13],
 'C' : [3,6,8,9,11]
 }
然后,您可以使用类似于此的内容映射事件(如果您不熟悉defaultdict或集合库,请查看它,它非常棒)

然后使用另一个dict按值对事件dict进行分组

result = defaultdict(list)
for value, letters in occurrences.items():
    result[tuple(letters)].append(value)
你得到了什么

 {('A',): [4],
  ('A', 'B'): [2, 10],
  ('A', 'B', 'C'): [6],
  ('A', 'C'): [8],
  ('B',): [13],
  ('B', 'C'): [11],
  ('C',): [3, 9]}

我没有足够的声誉来评论,我相信这不是最好的方式,但一个快速的事情可能会有所帮助

如果从将每个列表与字母关联的词典开始:

lists = {
 'A' : [2,4,6,8,10],
 'B' : [2,6,10,11,13],
 'C' : [3,6,8,9,11]
 }
然后,您可以使用类似于此的内容映射事件(如果您不熟悉defaultdict或集合库,请查看它,它非常棒)

然后使用另一个dict按值对事件dict进行分组

result = defaultdict(list)
for value, letters in occurrences.items():
    result[tuple(letters)].append(value)
你得到了什么

 {('A',): [4],
  ('A', 'B'): [2, 10],
  ('A', 'B', 'C'): [6],
  ('A', 'C'): [8],
  ('B',): [13],
  ('B', 'C'): [11],
  ('C',): [3, 9]}

使用集合解决此问题。上面是什么?你只发布了规格说明。这看起来像一个格子结构。@WillemVanOnsem我的意思是,如果我通过我的子弹,我只会得到循环和嵌套循环。我认为Python可能有一些我可以使用的东西,否则解决方案将与使用C++和向量,或者java ArayList.相同。你只发布了规格说明。这看起来像一个格子结构。@WillemVanOnsem我的意思是,如果我通过我的子弹,我只会得到循环和嵌套循环。我认为Python可能有一些我可以使用的东西,否则解决方案将与使用C++和向量,或者Java ArayList.java一样,不需要SPEPT,只想编写一个脚本,对从API中获取的数据进行过滤。将检查以上内容,谢谢!不需要spped-只想编写一个脚本,对从api获取的数据进行过滤。将检查以上内容,谢谢!