Python 中的成对集交集

2023-12-26

如果我有可变数量的集合(让我们称这个数字为n),最多有m每个元素,计算所有集合对的成对交集的最有效方法是什么?请注意,这与所有的交集不同n sets.

例如,如果我有以下集合:

A={"a","b","c"}
B={"c","d","e"}
C={"a","c","e"}

我希望能够找到:

intersect_AB={"c"}
intersect_BC={"c", "e"}
intersect_AC={"a", "c"}

另一种可接受的格式(如果它使事情变得更容易)是给定集合中的项目到包含相同项目的集合的映射。例如:

intersections_C={"a": {"A", "C"},
                 "c": {"A", "B", "C"}
                 "e": {"B", "C"}}

我知道这样做的一种方法是创建一个字典,映射所有值的并集中的每个值n设置为它出现的集合的列表,然后迭代所有这些值以创建列表,例如intersections_C上面,但我不确定它是如何缩放的n增加并且集合的大小变得太大。

一些额外的背景信息:

  1. 每个集合的长度大致相同,但也非常大(足够大,以至于将它们全部存储在内存中是一个现实的问题,并且避免这种情况的算法将是首选,但不是必需的)
  2. 与集合本身的大小相比,任何两个集合之间的交集的大小非常小
  3. 如果有帮助的话,我们可以假设有关输入集排序所需的任何内容。

这应该做你想做的

import random as RND
import string
import itertools as IT

模拟一些数据

fnx = lambda: set(RND.sample(string.ascii_uppercase, 7))
S = [fnx() for c in range(5)]

生成 S 中集合的索引列表,以便下面可以更简洁地引用这些集合

idx = range(len(S))

获取 S 中所有可能的唯一项目对;然而,由于集合交集是可交换的,我们想要组合而不是排列

pairs = IT.combinations(idx, 2)

编写一个函数执行集合交集

nt = lambda a, b: S[a].intersection(S[b])

将此函数折叠在对上并将每个函数调用的结果键入其参数

res = dict([ (t, nt(*t)) for t in pairs ])

下面的结果按照OP中引用的第一个选项进行格式化,是一个字典,其中values是两个序列的交集;每个值keyed到由这些序列的两个索引组成的元组

这个解决方案,真的只是two代码行:(i)计算排列; (ii) 然后对每个排列应用一些函数,将返回值存储在结构化容器(键值)容器中

该解决方案的内存占用量很小,但您可以通过在最后一步中返回生成器表达式来做得更好,即

res = ( (t, nt(*t)) for t in pairs )

请注意,使用这种方法,对的序列和相应的交集都没有被写在内存中——即,pairs and res是迭代器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的成对集交集 的相关文章

随机推荐

  • 使用动态而不是反射来按名称调用方法

    使用 NET 4 0 我将如何使用 Dynamic 来完成以下任务而不使用反射 public void InvokeMethod string methodName Type t typeof GCS WebService GCS WebS
  • 如何从为结果启动的活动返回字符串

    我已经启动了结果活动 但如何从该活动返回类似参数的字符串 只需使用以下代码块 Intent intent new Intent intent putExtra RESULT STRING string setResult RESULT OK
  • 通过点击图像(jquery 或 javascript)动态生成地图区域坐标

    我想知道是否有一种方法可以通过单击图像的某些部分来动态生成地图区域坐标 这是为了生成完整的图像图 举个例子 我有这张图片 单击此处查看图像 http mauricio lairet es otr plano jpg 通过单击它 我想为每个定
  • 切片类型的切片

    我目前正在努力通过优秀的围棋之旅 https tour golang org 我使用以下解决方案完成了其中一项练习 45 func Pic dx dy int uint8 pic make uint8 dy type declaration
  • 使用带有大 int 的 cython 时出现 OverflowError

    python 3 4 Windows 10 cython 0 21 1 我正在用 cython 将此函数编译为 c def weakchecksum data Generates a weak checksum from an iterab
  • 将字体大小转换为英寸

    我需要在之间进行转换Drawing Font Size 浮动 和 WPFFontSize 双精度 WPF 像素 最后 我决定将字体大小 以英寸为单位 存储在数据库中 如何将 GDI FontSize 转换为英寸 将 WPF FontSize
  • 展平相同类型的嵌套列表

    假设我想展平相同类型的嵌套列表 例如 ListA Element A Element B ListA Element C Element D ListB Element E Element F ListA包含相同类型的嵌套列表 ListA
  • 在 YAML 中构建字典项数组?

    基本上尝试在 yaml 中执行一些可以使用此 json 完成的操作 models model a type x bunch of properties model b type y bunch of properties 到目前为止 这就是
  • XD 代理 Facebook

    我正在使用 facebook connect 登录我的网站 在我的 html 页面中我编写代码 div div
  • Jenkins 和 Artifactory 的 Nuget 登录错误

    遇到问题Nuget Jenkins and 人工工厂 似乎无法获取Jenkins管道来识别Nuget配置 什么在起作用 使用我正在尝试阅读的帐户登录神器 查看我尝试访问的存储库和工件 使用 nuget 命令行访问存储库并在出现提示时输入用户
  • 返回新的 LINQ 对象

    我想编写 LINQ 它返回新对象 string int 包含 字符串 位置名称 int 位置计数 Output PositionA 8 PostionB 12 PostionC 13 这是我到目前为止所拥有的 public List
  • Android Studio 2022.2.1:网络检查器数据不可用

    我正在使用最新最好的 Android Studio 版本 Android Studio Flamingo 2022 2 1 Build AI 222 4459 24 2221 9862592 built on March 31 2023 R
  • 按索引合并两个数据帧

    我有以下数据框 gt df1 id begin conditional confidence discoveryTechnique 0 278 56 false 0 0 1 1 421 18 false 0 0 1 gt df2 conce
  • 如何在 webView 中启用 javascript

    在android中 如果我在webView中使用javascript 它会强制关闭 是否有可能在 webView 中使用 java 脚本 请帮忙 01 10 10 08 51 513 W dalvikvm 5994 JNI WARNING
  • 连续 WebJobs 和 CancellationToken

    我不明白取消令牌和网络作业背后的机制 我知道我可以使用Microsoft Azure WebJobs WebJobsShutdownWatcher Token获取令牌并做出反应token IsCancellationRequested例如
  • 获取C# WinForms App的应用程序图标

    我已使用 项目属性 选项卡为 C WinForms 应用程序分配了一个图标 该图标在构建时与程序清单一起提供 有没有办法获得System Drawing Icon在运行时获取此图标的对象 而无需再次将其嵌入资源中 我已经做了我的研究 有一种
  • Laravel Echo Server、Redis、Socket.IO:似乎无法使它们工作

    我正在使用 Laravel 开发实时应用程序 由于我不想使用 Pusher 所以我尝试使用 websockets 来工作Laravel 回声服务器 https github com tlaverdure laravel echo serve
  • firebase规则:如何根据用户角色限制访问

    我是 Firebase 新手 正在尝试了解安全规则 为此 我正在实现项目 团队成员 任务的典型功能 每个项目都会有一个团队负责人 多个成员和多个任务 这是我试图实现的结构和规则 也称为要求 Members each member has d
  • Rcpp 函数比 Rf_eval 慢

    我一直在开发一个包 它使用 Rcpp 在一组大型医学成像文件上应用任意 R 代码 我注意到我的 Rcpp 实现比原始的纯 C 版本慢得多 我追踪了通过 Function 调用函数与原始 Rf eval 的区别 我的问题是为什么性能会下降近
  • Python 中的成对集交集

    如果我有可变数量的集合 让我们称这个数字为n 最多有m每个元素 计算所有集合对的成对交集的最有效方法是什么 请注意 这与所有的交集不同n sets 例如 如果我有以下集合 A a b c B c d e C a c e 我希望能够找到 in