Python及C++中的集合
1. Python 中的集合(set)
1.1 特性
- 无序性:集合中的元素没有顺序,不能通过索引访问。
- 唯一性:集合中的元素不能重复,如果尝试添加重复的元素,集合会自动忽略。
- 可变性:集合是可变的,可以添加或删除元素。
- 基于哈希表实现:集合的底层是哈希表,因此查找、插入和删除操作的平均时间复杂度都是 O(1)。
1.2 创建集合
# 创建空集合
my_set = set()# 通过列表创建集合
my_set = set([1, 2, 3, 4, 4]) # 结果为 {1, 2, 3, 4},自动去重
1.3 常见操作
- 添加元素
my_set.add(5) # 添加一个元素 - 删除元素
my_set.remove(3) # 删除元素 3,如果元素不存在会抛出 KeyError my_set.discard(3) # 删除元素 3,如果元素不存在不会报错 - 查找元素
if 2 in my_set:print("2 is in the set") - 集合运算
- 并集
set1 = {1, 2, 3} set2 = {3, 4, 5} union_set = set1.union(set2) # 或者 set1 | set2 print(union_set) # 输出 {1, 2, 3, 4, 5} - 交集
intersection_set = set1.intersection(set2) # 或者 set1 & set2 print(intersection_set) # 输出 {3} - 差集
difference_set = set1.difference(set2) # 或者 set1 - set2 print(difference_set) # 输出 {1, 2} - 对称差集
symmetric_difference_set = set1.symmetric_difference(set2) # 或者 set1 ^ set2 print(symmetric_difference_set) # 输出 {1, 2, 4, 5}
- 并集
1.4 应用场景
- 去重:将列表转换为集合可以快速去除重复元素。
- 快速查找:利用集合的 O(1) 查找特性,可以高效地判断某个元素是否存在。
- 集合运算:用于处理集合之间的并集、交集、差集等操作,常用于图论、组合数学等问题。
2. C++ 中的集合(std::set 和 std::unordered_set)
2.1 std::set
- 特性
- 有序性:集合中的元素会自动按照升序排列。
- 唯一性:集合中的元素不能重复。
- 基于红黑树实现:查找、插入和删除操作的时间复杂度为 O(log n)。
- 创建集合
#include <set> std::set<int> my_set; - 常见操作
- 添加元素
my_set.insert(5); - 删除元素
my_set.erase(3); - 查找元素
if (my_set.find(2) != my_set.end()) {std::cout << "2 is in the set" << std::endl; } - 遍历集合
for (int num : my_set) {std::cout << num << " "; }
- 添加元素
2.2 std::unordered_set
- 特性
- 无序性:集合中的元素没有顺序。
- 唯一性:集合中的元素不能重复。
- 基于哈希表实现:查找、插入和删除操作的平均时间复杂度为 O(1)。
- 创建集合
#include <unordered_set> std::unordered_set<int> my_unordered_set; - 常见操作
- 添加元素
my_unordered_set.insert(5); - 删除元素
my_unordered_set.erase(3); - 查找元素
if (my_unordered_set.find(2) != my_unordered_set.end()) {std::cout << "2 is in the set" << std::endl; }
- 添加元素
2.3 应用场景
- 快速查找:
std::unordered_set的 O(1) 查找特性适合需要快速判断元素是否存在的场景。 - 有序操作:
std::set的有序特性适合需要对元素进行排序或二分查找的场景。 - 去重:两种集合都可以用于去除重复元素。
3. 总结
- Python 的
set:- 无序、唯一、基于哈希表实现。
- 查找、插入、删除操作的平均时间复杂度为 O(1)。
- 适合快速查找、去重和集合运算。
- C++ 的
std::set:- 有序、唯一、基于红黑树实现。
- 查找、插入、删除操作的时间复杂度为 O(log n)。
- 适合需要有序操作的场景。
- C++ 的
std::unordered_set:- 无序、唯一、基于哈希表实现。
- 查找、插入、删除操作的平均时间复杂度为 O(1)。
- 适合快速查找和去重。
相关文章:
Python及C++中的集合
1. Python 中的集合(set) 1.1 特性 无序性:集合中的元素没有顺序,不能通过索引访问。唯一性:集合中的元素不能重复,如果尝试添加重复的元素,集合会自动忽略。可变性:集合是可变的&…...
Ubuntu24.04搭建ESP8266_RTOS_SDK V3.4开发环境
【本文发布于https://blog.csdn.net/Stack_/article/details/147194686,未经允许不得转载,转载须注明出处】 需要有Linux使用基础,自行准备 1、VM17 Pro (自行搜索教程安装) 2、ubuntu-24.04-desktop-amd64 ࿰…...
数据仓库分层存储设计:平衡存储成本与查询效率
数据仓库分层存储不仅是一个技术问题,更是一种艺术:如何在有限的资源下,让数据既能快速响应查询,又能以最低的成本存储? 目录 一、什么是数据仓库分层存储? 二、分层存储的体系架构 1. 数据源层(ODS,Operational Data Store) 2. 数据仓库层(DW,Data Warehouse)…...
matlab求和∑函数方程编程?
matlab求和∑函数方程编程? 一 题目:求下列函数方程式的和 二:代码如下: >> sum_result 0; % 初始化求和变量 for x 1:10 % 设…...
基于Java+MySQL实现的(Web)科研资讯推送系统
科研资讯推送系统 技术选型 核心框架:SpringBoot 数据库层:springdatajpa 安全框架:Shiro 数据库连接池:Druid 缓存:Ehcache 部署 阿里云学生机:ecs.n4.small Tomcat:9.0 JDK:1.8 数据库:MySQL8.0 操作系统:CentOS…...
PHP弱类型hash比较缺陷
目录 0x00 漏洞原因 0x01 利用方法 0x02 [BJDCTF2020]Easy MD5 1 利用md5($password,true)实现SQL注入 PHP md5弱类型比较 数组绕过 0x00 漏洞原因 1、在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较 2、0e在比较的时候会将其认…...
asm汇编源代码之-汉字点阵字库显示程序源代码下载
汉字点阵字库显示程序 源代码下载 文本模式下显示16x16点阵汉字库内容的程序(标准16x16字库需要使用CHGHZK转换过后才能使用本程序正常显示) 本程序需要调用file.asm和string.asm中的子程序,所以连接时需要把它们连接进来,如下 C:\> tlink showhzk file string 调用参…...
Excel 中让表格内容自适应列宽和行高
Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…...
从 Vue 到 React:深入理解 useState 的异步更新
目录 从 Vue 到 React:深入理解 useState 的异步更新与函数式写法1. Vue 的响应式回顾:每次赋值立即生效2. React 的状态更新是异步且批量的原因解析 3. 函数式更新:唯一的正确写法4. 对比 Vue vs React 状态更新5. React useState 的核心源码…...
Java使用ANTLR4对Lua脚本语法校验
文章目录 什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Grammar文件maven配置生成Lexer Parser Listener Visitor代码新建实体类Lua语法遍历器语法错误监听器单元测试 参考 什么是ANTLR? https://www.antlr.org/ ANTLR (ANothe…...
vue3.2 + element-plus 实现跟随input输入框的弹框,弹框里可以分组或tab形式显示选项
效果 基础用法(分组选项) 高级用法(带Tab栏) <!-- 弹窗跟随通用组件 SmartSelector.vue --> <!-- 弹窗跟随通用组件 --> <template><div class"smart-selector-container"><el-popove…...
Vue 2.0和3.0笔记
Vue 3 关于组件 今天回顾了下2.0关于组件的内容,3.0定义组件的方式多了一种就是通过单文件组件(Single-File Component)的方式将Vue的模板,逻辑和样式放到一个文件中,2.0则不同,它是将模板放到一个属性中…...
Windows VsCode Terminal窗口使用Linux命令
背景描述: 平时开发环境以Linux系统为主,有时又需要使用Windows系统下开发环境,为了能像Linux系统那样用Windows VsCode,Terminal命令行是必不可少内容。 注:Windows11 VsCode 1.99.2 下面介绍,如何在V…...
负载均衡的实现方式有哪些?
负载均衡实现方式常见的有: 软件负载均衡、硬件负载均衡、DNS负载均衡 扩展 二层负载均衡:在数据链路层,基于MAC地址进行流量分发,较少见于实际应用中 三层负载均衡:在网络层,基于IP地址来分配流量,例如某…...
Oracle 中的 NOAUDIT CREATE SESSION 命令详解
Oracle 中的 NOAUDIT CREATE SESSION 命令详解 NOAUDIT CREATE SESSION 是 Oracle 数据库中用于取消对用户登录会话审计的命令,它与 AUDIT CREATE SESSION 命令相对应。 一、基本语法 NOAUDIT CREATE SESSION [BY user1 [, user2]... | BY [SESSION | ACCESS]] …...
OutputStreamWriter 终极解析与记忆指南
OutputStreamWriter 终极解析与记忆指南 一、核心本质 OutputStreamWriter 是 Java 提供的字符到字节的桥梁流,属于 Writer 的子类,负责将字符流按指定编码转换为字节流。 注意:OutputStreamWriter也是一个字符流,也是一个转换…...
1022 Digital Library
1022 Digital Library 分数 30 全屏浏览 切换布局 作者 CHEN, Yue 单位 浙江大学 A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an u…...
LWIP学习笔记
TCP/ip协议结构分层 传输层简记 TCP:可靠性强,有重传机制 UDP:单传机制,不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层,构成LWIP内核程序: 链路层;由mac内核STM芯片的片上外设…...
Nodejs Express框架
参考:Node.js Express 框架 | 菜鸟教程 第一个 Express 框架实例 接下来我们使用 Express 框架来输出 "Hello World"。 以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 "Hello World" 字符串。 创建 e…...
LeetCode面试热题150中19-22题学习笔记(用Java语言描述)
Day 04 19、最后一个单词的长度 需求:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 代码表示 public class Q19_1 {p…...
道路运输安全员企业负责人考试内容与范围
道路运输企业主要负责人(安全员)考证要求 的详细说明,适用于企业法定代表人、分管安全负责人等需取得的 《道路运输企业主要负责人和安全生产管理人员安全考核合格证明》(交通运输部要求)。 考试内容与范围 1. 法律法…...
Visual Studio Code 开发 树莓派 pico
开发环境 MCU:Pico1(无wifi版)使用固件:自编译版本开发环境:Windows 10开发工具:Visual Studio Code 1.99.2开发语言:MicroPython & C 插件安装 找到Raspberry Pi Pico并安装开启科学上网…...
Oracle 11G RAC 删除添加节点(一):删除节点
1、查看节点删除前的资源状态 用集群资源查看命令查看一下状态 1 [gridlvmrac1 ~]$crsctl stat res ‐t 2 ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐…...
面试宝典(C++基础)-02
文章目录 1.C++基础1.1 说说new和malloc的区别1.2 说说const和define的区别。1.3 说说C++中函数指针和指针函数的区别1.4 说说const int *a, int const *a, const int a, int *const a, const int *consta分别是什么,有什么特点。1.5 说说使用指针需要注意什么?1.6 说说内联函…...
express框架使用cors包解决跨域问题时,还是存在问题的原因。
express框架使用cors包解决跨域问题时,还是存在问题的原因。 今天我在使用express框架写一个后台管理系统时,发现存在这样的问题,那就是跨域问题,但是我明明是使用了 cors 包解决了跨域问题了。当我调用其他接口的时候࿰…...
Python与R语言用XGBOOST、NLTK、LASSO、决策树、聚类分析电商平台评论信息数据集
全文链接:https://tecdat.cn/?p41501 分析师:Rui Liu 在当今数字化浪潮席卷的时代,电商市场的蓬勃发展犹如一部波澜壮阔的史诗,蕴藏着无尽的商业价值与潜力。电商平台积累的海量数据,宛如一座等待挖掘的宝藏ÿ…...
半导体制造如何数字化转型
半导体制造的数字化转型正通过技术融合与流程重构,推动着这个精密产业的全面革新。全球芯片短缺与工艺复杂度指数级增长的双重压力下,头部企业已构建起四大转型支柱: 1. 数据中枢重构产线生态 台积电的「智慧工厂4.0」部署着30万物联网传感器…...
LabVIEW 程序持续优化
LabVIEW 以其独特的图形化编程方式,在工业自动化、测试测量、数据分析等众多领域发挥着关键作用。为了让 LabVIEW 程序始终保持高效、稳定,并契合不断变化的实际需求,持续改进必不可少。下面将从多个关键维度,为大家细致地介绍通用…...
Windows10系统RabbitMQ无法访问Web端界面
项目场景: 提示:这里简述项目相关背景: 项目场景: 在一个基于 .NET 的分布式项目中,团队使用 RabbitMQ 作为消息队列中间件,负责模块间的异步通信。开发环境为 Windows 10 系统,开发人员按照官…...
初阶数据结构--链式二叉树
二叉树(链式结构) 前面的文章首先介绍了树的相关概念,阐述了树的存储结构是分为顺序结构和链式结构。其中顺序结构存储的方式叫做堆,并且对堆这个数据结构进行了模拟实现,并进行了相关拓展,接下来会针对链…...
