当前位置: 首页 > news >正文

Python中的集合魔法:解锁高效数据处理的秘密

引言

集合是一种不允许重复元素的数据结构,并且其内部元素无序排列。这种特性使得集合在某些场景下表现得极为出色:

  • 去重:快速去除列表或数组中的重复项。
  • 交集、并集、差集等运算:用于比较两个或多个集合间的关系,非常适用于权限控制、用户管理等领域。
  • 性能优势:相较于列表,集合在查找元素时速度更快,平均时间复杂度为O(1)。

基础语法介绍

创建集合

在Python中创建一个空集合需要使用set()函数,而直接使用花括号 {} 会创建一个空字典而不是空集合。若想创建含有初始元素的集合,则可以直接将这些元素放入花括号内:

# 创建空集合
empty_set = set()# 创建非空集合
fruits = {'apple', 'banana', 'cherry'}

基本操作

集合支持添加、删除元素以及判断元素是否存在于集合中等操作:

# 添加元素
fruits.add('orange')# 删除元素
fruits.remove('banana')  # 若元素不存在会抛出KeyError异常# 判断元素是否存在
print('apple' in fruits)  # 输出 True 或 False

基础实例

假设我们需要从一个学生名单中找出所有姓“张”的同学,可以利用集合来简化这个任务:

students = ['张三', '李四', '王五', '张六']
zhangs = {name for name in students if name.startswith('张')}
print(zhangs)  # 输出 {'张三', '张六'}

进阶实例

在处理更复杂的业务逻辑时,集合同样能发挥巨大作用。例如,在实现好友推荐系统时,可以通过计算用户之间的共同兴趣点来推荐新朋友:

def recommend_friends(user_interests, all_users):user_set = set(user_interests[user])recommended = []for u in all_users:if u != user:  # 不推荐自己other_interests = set(user_interests[u])common_interests = user_set & other_interests  # 交集if len(common_interests) > 0:recommended.append((u, len(common_interests)))return sorted(recommended, key=lambda x: x[1], reverse=True)# 示例数据
user_interests = {'Alice': ['Music', 'Art', 'Travel'],'Bob': ['Sports', 'Cooking', 'Travel'],...
}

实战案例

在某电商网站后台管理系统中,我们面临一个挑战:如何快速定位哪些商品既属于热销商品又属于库存紧张的商品?通过集合操作,这个问题变得迎刃而解:

hot_items = {'item1', 'item2', 'item3'}
low_stock_items = {'item2', 'item3', 'item4'}# 找出同时满足条件的商品
critical_items = hot_items & low_stock_items
print(critical_items)  # 输出 {'item2', 'item3'}

扩展讨论

除了上述介绍的基本功能外,Python还提供了更多与集合相关的高级特性,比如frozenset,它是一个不可变版本的集合类型,非常适合用于作为字典的键或者作为其他集合的元素。此外,集合还支持数学中的对称差集运算(^),即两个集合中独有的元素组成的集合。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 无法连接Redis服务问题排查
  • 云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用
  • Question mutiple pdf‘s using openai, pinecone, langchain
  • 新160个crackme - 045-CyTom-crackme
  • 如何用GPT进行编程辅助?
  • MyBatis 源码解析:DefaultSqlSessionFactory 的创建与管理
  • 基于QT与STM32的电力参数采集系统(华为云IOT)(211)
  • 面试经验分享 | 华为安全面试--年薪50万offer
  • MySQL中的分组统计
  • 记一次ssh伪终端修改为shell
  • 案例-KVM高级功能部署(虚拟化技术实战)
  • nuxt3连接mongodb操作
  • 线性代数 第五讲:线性方程组_齐次线性方程组_非齐次线性方程组_公共解同解方程组_详解
  • k8s-pod 实战八 (gRPC 探测详细分析)
  • Linux虚拟机搭建K8S环境
  • download使用浅析
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Javascript编码规范
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL数据库运维之数据恢复
  • Terraform入门 - 1. 安装Terraform
  • Vue ES6 Jade Scss Webpack Gulp
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 代理模式
  • 给新手的新浪微博 SDK 集成教程【一】
  • 前端自动化解决方案
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​字​节​一​面​
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #pragma once与条件编译
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)(4.6) Triducer
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Standard 的管理策略
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @angular/cli项目构建--Dynamic.Form
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [2018-01-08] Python强化周的第一天
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体