讲师中心 微信公众号
AI工具推荐 视频效率加速

Python中高效提取与给定集合关联的边列表

秋敏同学_2628

秋敏同学_2628

发布时间:2025-10-29 12:08:01

|

624人浏览过

|

来源于php中文网

原创

Python中高效提取与给定集合关联的边列表

本文详细介绍了如何在python中根据给定的节点集合,高效地筛选出图中所有两端节点均包含在该集合内的边。通过将节点集合转换为python的`set`对象,并利用`issuperset`方法结合列表推导式,可以简洁而高效地实现这一目标,从而避免复杂的循环和条件判断,提高代码的可读性和执行效率。

需求分析:根据节点集合筛选图的边

在图论相关的编程任务中,我们经常会遇到这样的场景:给定一个图的边列表(例如,每条边表示为包含两个节点的列表),以及一组节点集合。我们的目标是从原始边列表中筛选出所有这样的边,即该边的两个节点都完整地包含在某个特定的节点集合中。

例如,考虑以下输入数据:

  • 边列表 edges: [ [1,2] , [2,3] , [3,4] , [4,5] , [5,2] , [4,6] , [6,7] , [7,6] , [7,8] ]
  • 节点集合列表 sets: [ [2,3,4,5] , [6,7] ]

我们期望的输出是 sets_of_edges,它是一个列表的列表,其中每个子列表对应sets中的一个节点集合,并包含所有满足条件的边:

  • 对于 [2,3,4,5],对应的边是 [ [2,3] , [3,4] , [4,5] , [5,2] ]
  • 对于 [6,7],对应的边是 [ [6,7] , [7,6] ]

最终输出应为:[ [ [2,3] , [3,4] , [4,5] , [5,2] ] , [ [6,7] , [7,6] ] ]

Forge — Python Developer
Forge — Python Developer

Python开发助手 — 自动化脚本、API封装、命令行工具、数据管道、网页爬虫。经过测试的代码,包含错误处理和文档。当你需要...

下载

立即学习“Python免费学习笔记(深入)”;

解决方案:利用 set 和 issuperset

解决此问题的关键在于高效地判断一条边的两个节点是否都存在于一个给定的节点集合中。Python的set数据结构提供了非常高效的成员测试(in操作)和集合关系判断(如issuperset)。

核心思路如下:

  1. 将节点集合转换为set对象:对于sets列表中的每个子列表(代表一个节点集合),将其转换为Python的set对象。set对象在进行成员测试时具有O(1)的平均时间复杂度,远优于列表的O(n)。
  2. 利用issuperset方法:对于edges列表中的每一条边(例如 [u, v]),我们可以将其视为一个包含两个元素的set {u, v}。然后,我们可以判断这个{u, v}集合是否是目标节点集合(已转换为set)的子集。Python的set.issuperset()方法可以检查一个集合是否包含另一个集合的所有元素。在本例中,我们是检查目标节点集合(大集合)是否是边集合(小集合)的超集。
  3. 结合列表推导式:使用列表推导式可以简洁地实现对sets中每个节点集合的迭代,并在每次迭代中对edges进行过滤。

示例代码实现

# 输入数据
edges = [ [1,2] , [2,3] , [3,4] , [4,5] , [5,2] , [4,6] , [6,7] , [7,6] , [7,8] ]
sets = [ [2,3,4,5] , [6,7] ]

# 核心解决方案
# 1. 使用 map(set, sets) 将每个节点列表转换为set对象,提高查找效率。
# 2. 对于每个转换后的set `s`,使用 filter(s.issuperset, edges) 过滤 `edges`。
#    s.issuperset(edge_list) 会检查 `s` 是否包含 `edge_list` 中的所有元素。
#    注意:这里 `edge_list` 实际上会被隐式转换为一个临时set进行比较。
# 3. list(...) 将 filter 对象转换为列表。
# 4. 整个表达式是一个列表推导式,对 `sets` 中的每个元素执行上述操作。
sets_of_edges = [list(filter(s.issuperset, edges)) for s in map(set, sets)]

# 输出结果
print(sets_of_edges)

输出结果

[[[2, 3], [3, 4], [4, 5], [5, 2]], [[6, 7], [7, 6]]]

注意事项与总结

  1. 数据类型转换的必要性:将节点集合转换为set是性能优化的关键。如果sets中的元素仍然是列表,issuperset的性能会下降,因为它需要在内部进行额外的转换。map(set, sets)确保了这一点。
  2. issuperset的理解:s.issuperset(edge)的含义是:集合s是否包含edge中的所有元素。这正是我们需要的判断条件,即边的两个节点都必须存在于目标节点集合s中。
  3. 简洁性与效率:这种方法利用了Python内置set操作的优化,代码非常简洁且执行效率高,尤其适用于处理大规模图数据。相较于手动嵌套循环并使用in操作进行多次判断,issuperset提供了更高级别的抽象和更优的性能。
  4. 边的表示:本教程假设边表示为 [node1, node2] 这样的列表。如果边是元组 (node1, node2),代码同样适用。

通过上述方法,我们可以高效且优雅地解决根据节点集合筛选图边的问题,这在图分析、网络处理等领域具有广泛的应用价值。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2922

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2574

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2992

2025.04.24

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2871

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

534

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

482

2026.02.12

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2481

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

356

2025.12.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn