Python 找到多个集合的所有可能交点的最佳方法是什么?

Python 找到多个集合的所有可能交点的最佳方法是什么?,python,set,set-intersection,Python,Set,Set Intersection,假设我有以下4套 Set1 = {1,2,3,4,5} Set2 = {4,5,6,7} Set3 = {6,7,8,9,10} Set4 = {1,8,9,15} 我希望找到这些集合之间的所有可能交点,例如: Set1 and Set4: 1 Set1 and Set2: 4,5 Set2 and Set3: 6,7 Set3 and Set4: 8,9 就python而言,最好的方法是什么?谢谢大家! 来自: #用于intersection()函数的Python3程序 set1={2,4

假设我有以下4套

Set1 = {1,2,3,4,5}
Set2 = {4,5,6,7}
Set3 = {6,7,8,9,10}
Set4 = {1,8,9,15}
我希望找到这些集合之间的所有可能交点,例如:

Set1 and Set4: 1
Set1 and Set2: 4,5
Set2 and Set3: 6,7
Set3 and Set4: 8,9
就python而言,最好的方法是什么?谢谢大家!

来自:

#用于intersection()函数的Python3程序
set1={2,4,5,6}
set2={4,6,7,8}
set3={4,6,8}
#两集并
打印(“set1交叉点set2:”,set1.交叉点(set2))
#三集并
打印(“set1交叉点set2交叉点set3:”,set1.交叉点(set2,set3))
从以下方面:

交叉口(*其他)

设置和其他&……

返回一个新集合,其中包含集合和所有其他集合共有的元素


你需要找到2组组合(从你想要的输出中扣除)。这可以通过使用。对于每个组合,应执行两组之间的相交
为了执行上述操作,(输入)集在列表(iterable)中“分组”

也指出

code.py:

#/usr/bin/env蟒蛇3
导入系统
进口itertools
def main():
set1={1,2,3,4,5}
set2={4,5,6,7}
set3={6,7,8,9,10}
set4={1,8,9,15}
sets=[set1,set2,set3,set4]
对于itertools.组合(枚举(集合,开始=1),2)中的索引集对:
(index_first,set_first),(index_second,set_second)=index_set_对
交叉点=设置为第一。交叉点(设置为第二)
如果是交叉口:
打印(“集合{:d}和集合{:d}={:}”。格式(先索引,后索引,相交))
如果名称=“\uuuuu main\uuuuuuuu”:
打印(“Python{:s}on{:s}\n.”格式(sys.version,sys.platform))
main()
打印(“\n完成”)
请注意,仅用于打印目的(在输出中设置1、设置2、…)

输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056551261]>“e:\Work\Dev\VEnvs\py_064\u 03.07.03_test0\Scripts\python.exe”code.py
win32上的Python 3.7.3(v3.7.3:ef4ec6ed12,2019年3月25日,22:22:05)[MSC v.1916 64位(AMD64)]
Set1和Set2={4,5}
Set1和Set4={1}
Set2和Set3={6,7}
Set3和Set4={8,9}
完成。

如果只查找两个集合的交点,可以简单地执行嵌套for循环:

Set1 = {1,2,3,4,5}
Set2 = {4,5,6,7}
Set3 = {6,7,8,9,10}
Set4 = {1,8,9,15}
sets = [Set1,Set2,Set3,Set4]
for i,s1 in enumerate(sets[:-1]):
    for j,s2 in enumerate(sets[i+1:]):
        print(f"Set{i+1} and Set{i+j+2} = {s1&s2}")

# Set1 and Set2 = {4, 5}
# Set1 and Set3 = set()
# Set1 and Set4 = {1}
# Set2 and Set3 = {6, 7}
# Set2 and Set4 = set()
# Set3 and Set4 = {8, 9}
如果要查找任意数量的这些集合的交集,则可以使用itertools中的combinations()生成索引的幂集,并对每个组合执行交集:

from itertools import combinations
for comboSize in range(2,len(sets)):
    for combo in combinations(range(len(sets)),comboSize):
        intersection = sets[combo[0]]
        for i in combo[1:]: intersection = intersection & sets[i]
        print(" and ".join(f"Set{i+1}" for i in combo),"=",intersection)

Set1 and Set2 = {4, 5}
Set1 and Set3 = set()
Set1 and Set4 = {1}
Set2 and Set3 = {6, 7}
Set2 and Set4 = set()
Set3 and Set4 = {8, 9}
Set1 and Set2 = {4, 5}
Set1 and Set3 = set()
Set1 and Set4 = {1}
Set2 and Set3 = {6, 7}
Set2 and Set4 = set()
Set3 and Set4 = {8, 9}
Set1 and Set2 and Set3 = set()
Set1 and Set2 and Set4 = set()
Set1 and Set3 and Set4 = set()
Set2 and Set3 and Set4 = set()

你只看一对一对的吗?或者是任何数量的?@pault任何数量的。这太完美了。干净、易懂的解决方案。非常感谢。