在python中搜索元组的两个元组的交集

vzgqcmou  于 2022-11-28  发布在  Python
关注(0)|答案(2)|浏览(209)

有以下问题。我从stdin阅读数据并将其保存在列表中,我以如下方式将其转换为元组:

x = int(input())
f = []

for i in range(x):
    a, b = map(int, input().split())
    f.append([a,b])

def to_tuple(lst):
    return tuple(to_tuple(i) if isinstance(i, list) else i for i in lst)

在这之后,我收到两个元组,看起来像这样:

f = ((0, 1), (1, 2), (0, 2), (0, 3))
s = (((0,), (1, 2, 3)), ((0, 1), (2, 3)), ((0, 1, 2), (3,)))

我试图做的是找出f的所有内部元组与s的每个元组之间的交集的数目。(因此在f中,我们具有所有可能的“边”,并且检查在s的特定元组中的内部元组之间是否将存在边)。因此,对于示例,它应该输出[3,2,1]
基本上,我知道在简单的交集情况下如何做-所以可以只使用set(),然后应用a.intersection(b),但是在我的情况下,我应该如何进行呢?
非常感谢和抱歉,如果这个问题已经问过了:=)

g6ll5ycj

g6ll5ycj1#

这是一个如何继续的示例

a = ((1,1),(1,2))
b = (((1,2),(3,1)),((3,2),(1,2)),((1,4),))
for t in b:
    c=[i for i in a for j in t if i==j]
piv4azn7

piv4azn72#

我相信这可以用不同方法解决,但我相信这是最简单的。

out = set() # holds the output
for ff in f:  # loop through f tuple
   ff = set(ff)  # convert to set
   for ss1,ss2 in s:  # loop through s tuple
       # you can select which tuple to do the intersection on. 
       # here I am doing the intersection on both inner tuples in the s tuple.
       ss1 = set(ss1)  # convert to set
       ss2 = set(ss2)
       out.update(ff.intersection(ss1)) # intersection and add to out
       out.update(ff.intersection(ss2)) # intersection and add to out

#if you want your output to be in list format
out = list(out)

相关问题