python处理list中set,获取最大并集的所有集合

【算法学习】连通性问题——并集查找算法 连通性问题:假如已知一个整数对序列,每个整数代表某种类型的一个对象,并且将p-q对解释为p与q连通。假定连通可传递:如果p与q连通,q与r连通,那么p与r连通。编写一个程序,从集合中过滤额外的连接对,如果前面的对表明p与q连通,则程序应该忽略p-q,并继续输入下一个对。例如 : - input output - 3-4 3-4 - 4-9 4-9 - 8-0 阅读详情

       前一阵子在搞数据分析的时候,碰到了这样的需求,有n种物品,m个人,每个人会买过n种物品中的多个,只要两个人之间有买过相同物品,无论几个,我们就把他当做一类人。即便a和b两个人之间没有买过相同的物品,c都买过a和b中的物品,那么a,b,c都可看成一类人。具体形式如下:list = [{1,4,7},{2,5,7},{1,5,6},{9,11,23},{4,23,39},{34,6,10}]

       list中的set代表人的购物情况(该示例中有len(list)个人),一个set中的数据,如{1,4,7}则代表当前人所购物的物品索引是1,4,7,(肯定不会写:苹果,梨,手机之类的真实内容)。我们需要得出的结果是:[{1,4,7,2,5,1,6,34,10},{9,11,23},{4,23,39}] 其含义为:购买1,4,7,2,5,,6,34,10物品的为一类人,购买9,11,23物品的为一类人,购买4,23,39物品的为一类人。emm..就是这样

主体思想就是:如果两个set取交集不为空,那么取两者并集当做一个新的集合。

提供两种解决方式:

其一:递归,代码如下:

# one 为待处理的list集合
finallist = [] # 处理后的存储集合
one.apend({len(one)})  # 在尾部增加一个集合(list的长度,为了保证递归算法的退出)
# 递归算法
def dealwithlist(first, one):
    residue = []
    if len(one) > 0:
        for i in range(0, len(one)):
            if first & one[i]:
                first = first | one[i]
            else:
                residue.append(one[i])
        # 每次循环完一轮就判断是否含有这个set
        if finallist.__contains__(first):
            if len(residue) > 1:  # 对剩余的list集合做取并
                finallist.insert(0, finallist[-1])  # 选择在头部插入finalist最后一个
                dealwithlist(residue[0], residue)
                return
            else: # 如果只剩下无用的那个集合,则退出
                return
        else:
            if len(finallist) > 0:
                finallist.pop(-1)  # 删除finalist最后一个位置
            finallist.append(first)
    dealwithlist(first, residue)

one.pop(-1) # 得到最后的结果集

递归的弊端也是很明显:当数据量变大,比较次数增多的时候,会超出最大递归深度,进而出现栈溢出的问题!待大神解决

 

 

其二:动态改变list:

list_a为待处理的list

def set_group(list_a):
    tgt = []
    # 遍历所有元素,进行分组
    for i, x in enumerate(list_a):
        z = x  # 暂存当前元素
        flag = []  #

        # 如果目标库不为空,遍历目标库,看是否存在有交集的元素
        if len(tgt) > 0:
            for j, y in enumerate(tgt):
                # 判断是否存在交集
                if z.intersection(y):
                    z = z.union(y)
                    # 若存在并集,则将当前元素记录
                    flag.append(j)

                    # 如果存在已有的元素,删除原有的元素
            if len(flag) > 0:
                flag.reverse()  # 之所以要倒排一下,是防止list删除元素后的遍历异常
                for k in flag:
                    tgt.pop(k)

        tgt.append(z)
    return tgt

 

一文搞懂Set集合:从原理到多语言实战与常见报错排查 数据结构是编程的基石,Set作为重要的抽象数据类型,以元素唯一性和高效查找著称。它通常基于哈希表实现,提供平均O(1)的插入、删除与查找性能,因此被广泛用于数据去重、集合运算、标签系统等场景。无论面试还是日常开发,掌握Set都能显著简化代码并提升效率。本文从集合的核心概念出发,深入剖析哈希原理与去重机制,系统对比Python、Java、C++、JavaScript四种主流语言的Set用法,并通过用户标签系统实战演示交集、并集等操作,同时讲解SQL中UPDATE SET语句的安全实践以及环境变量配置类报错的排 阅读详情

相关推荐

Python数据结构选型实战:list、tuple、dict、set的本质与工程应用

Python数据结构是程序性能与可维护性的底层基石,而非语法附属。list作为动态数组适合有序序列操作,tuple凭借不可变性与可哈希性成为键值映射和契约建模的关键,dict基于哈希表实现O(1)键查找,支撑高并发配置管理与缓存系统,set则专精于去重与集合运算。理解其时间复杂度差异(如in操作在list为O(n)、在dict/set中为O(1))直接决定算法效率与系统响应。在日志分析、配置中心、AI数据管道等真实场景中,合理选型可降低60%以上内存占用并提升10倍处理速度。本文聚焦工程直觉——不背理论,只

fanjava 312

并查集算法-双HashMap实现(附LeetCode128题的并查集题解)

双HashMap实现并查集算法

西城风雨楼 791

以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍

网络设备中肯定离开不MAC和PHY,本篇文章将详细介绍下以太网中一些常见术语与接口。 MAC和PHY结构 从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意: 上图中DMA集成在CPU,CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,**将MAC集成进CPU而将PHY留在片外,这种...

sternlycore的博客 13万+

python获取set中某些元素,Python:如何在恒定时间内获取set()中的最大元素?

你要的是一个ordered set。在Python的例子中,最好是说sorted,因为有序集配方按照元素插入的顺序保存元素。在根据@user2357112的评论,这在默认情况下不受支持。在这样一个集合中插入的时间会更长(非常长),尽管由某个比较运算符定义的最大值/最小值在O(1)处可用。在如果您不关心插入的复杂性,一个简单的解决方案是在python中将集合另存为一个列表,自己维护set行为。一种简...

weixin_39622521的博客 538

Anti-UAV 反无人机大赛数据集处理脚本(1)标签转换为YOLO格式

【代码】Anti-UAV 反无人机大赛数据集处理脚本(1)标签转换为YOLO格式。

qq_45937329的博客 534

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

python求解两个list列表的交集

python求解两个list列表的交集常用的有以下两种方法: ① 遍历其中一个列表检查当前遍历的元素是否存在于另外一个列表,如果存在那么将其加入到结果集中 ② 将两个列表转换为set集合,然后使用集合操作符&求解两个set集合的交集,最后可以使用list列表将并集的结果转换为list列表类型 下面是具体的例子: if __name__ == '__main__': # 主要有两种方法求解两个列表的交集 list1 = [1, 2, 3, 4] list2 = [2,

二哈 2万+

AI Agent 架构的底层原理与核心机制

AI Agent五层架构实现智能闭环运转:1)感知层负责多模态信息输入与预处理;2)记忆层分类存储短期/长期记忆及知识库;3)认知层通过ReAct推理和反思机制进行决策规划;4)工具层调用外部API扩展能力边界;5)执行层完成任务输出并形成反馈闭环。五层架构通过"输入-处理-输出-优化"的联动机制,使Agent具备自主决策、持续学习和任务执行能力,突破传统LLM的局限,实现从信息处理到实际落地的完整智能体系。

女王の专属领地 493

python 列表取交集

Python 中列表取交集的方法有两种: 方法一:使用内置函数 intersection() 如果要取两个列表的交集,可以使用内置函数 intersection(),它会返回两个列表中都有的元素。 例如: list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] result = list1.intersection(list2) print(result)# 输出 [...

weixin_35756373的博客 1万+

HFSS实战项目——微带一分四功分器

呕心沥血保姆级教程!!!!手把手教会你做功分器,史上最详细步骤!!!

2401_87464239的博客 2672

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

Python数据类型:序列(str、list、tuple、dict、range) 、集合set

序列sequence是多个值组成的一个整体,Python中的序列包含列表list、元组tuple、字符串str等。

人不风流枉少年 1657

SolidWorks速成教程P1——简介及基础操作

SolidWorks教程P1——简介及基础操作

嵌入式阿齐Archie 2万+

深入解析 fmutils:用 FieldMask 高效裁剪 Golang Protobuf 消息及其在 Agones 中的实战

fmutils 是一个专为 Golang protobuf(APIv2,即 `google.golang.org/protobuf`)设计的字段掩码工具库,提供 `Filter` 与 `Prune` 两种语义截然相反的字段裁剪操作,帮助开发者以“点分路径”精准保留或清除消息中的任意嵌套字段。在 Agones 项目中,fmutils 被引入 SDK Server 的 `UpdateList` 实现中

gitblog_00308的博客 417

基于FDTD的涡旋光束发射器设计

为实现涡旋光束在小型设备中的应用,提出一种圆柱孔光栅蚀刻硅微环谐振腔结构,器件半径仅为4.1μm。建立一个理论模型,利用偶极子点表示沿微环腔内壁的光栅元件散射辐射,推导输出光场表达式,建模结果验证该结构可在不同波长下选择性地产生各种拓扑数的涡旋光束。此外,对器件进行性能分析与参数优化,结果表明,微环波导宽度过小会大大增加微环的辐射损耗。当微环波导宽度为450nm、耦合间距为100nm时,1 579nm波长附近的谐振峰输出功率为16.3dB,Q值为15 800。

qq_61890005的博客 827

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

aredis数据结构实战:列表、集合与Sorted Set完整操作示例

**aredis** 是一个高效易用的 Python asyncio Redis 异步客户端,完整支持 Redis 单节点、Sentinel 哨兵与 Cluster 集群模式。本文面向新手,带你快速掌握 aredis 中三大核心数据结构——**列表(List)**、**集合(Set)** 与**有序集合(Sorted Set)** 的实战用法,包含阻塞队列、成员判断、排行榜等经典场景的完整操作示例

gitblog_00891的博客 833

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python:list列表,tuple元组,set集合,dict字典区别

Python一些内置函数 1、cmp(A, B):比较可为list、tuple等的A、B,A>B为1,A=B为0,小于为-1 2、len(obj): 计算元素个数。 3、max(obj):返回元素最大值。 4、min(obj):返回元素最小值。 5、reversed(obj): 对元素进行翻转 6、enumerate(obj): 遍历list的元素,返回序号及其对应的元素 for x,y i...

qinjiao的博客 1710

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python之list列表、tuple元组、set集合、dict字典之间的区别

Python一些内置函数 1、cmp(A, B):比较可为list、tuple等的A、B,A>B为1,A=B为0,小于为-1 2、len(obj): 计算元素个数。 3、max(obj):返回元素最大值。 4、min(obj):返回元素最小值。 5、reversed(obj): 对元素进行翻转 6、enumerate(obj): 遍历list的元素,返回序号index及其对应...

随意的风的专栏 1091

Python的list/tuple、set/dict

文章目录list和tuplelist列表tuple元组dict和setdict字典set组 list和tuple 详见http://www.runoob.com/python/python-lists.html list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用 list列表 简介 列表是python内置的一种数据类型 可以随时添加和删除其中的元素 li...

xiadanying的博客 554

python逻辑讲解_python-10-set详解

集 set约定set 翻译为集collection 翻译集合类型,是一个大概念set可变的、无序的、不重复的元素的集合但是也有顺序集合,比如java当中的treeset,有排序的集当中的元素是散放的,是一个散列值,是个哈希。python当中所有数据结构,在其他语言当中都能够找到。列表更适合尾部追加,两头要操作就要用queue。前面学过的可变的,就是bytearray,list。可变不可变,指的就是...

weixin_39535752的博客 287

Python四大内置数据结构:list、tuple、dict、set的底层原理与工程实践

Python的list、tuple、dict、set并非语法糖,而是基于内存模型、哈希算法与可变性约束构建的核心容器。它们分别对应动态数组、不可变序列、紧凑哈希表和键值复用集合,在CPU缓存友好性、时间复杂度(如O(1)查找)和并发安全性上存在本质差异。理解其C层实现(如CPython中dict的开放寻址、set对dict的复用)能显著提升性能敏感场景的选型能力,广泛应用于日志解析、UV/PV统计、漏斗分析及缓存设计等真实工程任务。

cishan3804的博客 401

浅谈python中的 list、tuple、dict、set

浅谈python中的 list、tuple、dict、set list: 简介: 有序的集合,包含多个元素 数据可以是任意类型 支持索引访问 用[ ]表示,例如a=[ ] 或者 a=list() 访问: 索引访问 a[1]...

weixin_42078660的博客 307

Python中的数据类型及其操作(str、list、tuple、set、dict)

文章目录1.字符串的定义2.字符串的特性2.1 字符串的索引(index)2.2 字符串的切片(cut)2.3 字符串的重复(repeat)2.4 字符串的连接(link)2.4 字符串的成员操作符2.4 字符串中数字/字母的判断2.5 字符串中对于开头/结尾的处理2.6 去除字符串中的空格2.x 字符串的练习练习:检测是否为回文数字练习:变量名是否合法: 1.字符串的定义 In [1]: a='...

Aimee_c的博客 5937

redis set list 长度限制

我整理的一些关于【SET】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Redis Set List 长度限制 Redis 是一个开源的内存数据结构存储系统,通常用作数据库、缓存和消息代理。Redis 的灵活性使得它能够支持多种数据结构,其中包括字符串、哈希、列...

weixin_41244086的博客 481

python 列表list 元组tuple 字典dict 集合set 介绍

序列序列的两个特点: 1.索引操作符,从序列中抓取一个特定项目 2.和切片操作符,获取序列的一个切片,即一部分序列列表、元组和字符串都是序列,字符串是字符的序列,列表和元祖是任意类型的序列列表list,用中括号“[ ]”表示1.任意对象的有序集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过偏移读取 组成列表的值叫做元素(Elements)。每一个元素被标识一个索引,第一个索引

Johnny's Lab 1万+

Python 工匠:做一个精通规则的玩家——用集合差集与魔法方法写出更地道的 Python 代码

> 本文是开源仓库《Python 工匠》(one-python-craftsman)系列文章的第 10 篇。它以“旅游客户筛选”这一真实业务案例为主线,演示了从 O(n*m) 蛮力循环到 O(n+m) 哈希索引、再到基于 `__hash__`/`__eq__` 自定义对象与集合差集的一行式解法,并进一步讲解 `__format__`、`__len__`/`__getitem__` 等魔法方法如何帮

gitblog_00852的博客 494
上一篇: java --位运算符问题
下一篇: py3 pandas dataframe to_sql 中文插入oracle失败
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值