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

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::setstd::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 中的集合&#xff08;set&#xff09; 1.1 特性 无序性&#xff1a;集合中的元素没有顺序&#xff0c;不能通过索引访问。唯一性&#xff1a;集合中的元素不能重复&#xff0c;如果尝试添加重复的元素&#xff0c;集合会自动忽略。可变性&#xff1a;集合是可变的&…...

Ubuntu24.04搭建ESP8266_RTOS_SDK V3.4开发环境

【本文发布于https://blog.csdn.net/Stack_/article/details/147194686&#xff0c;未经允许不得转载&#xff0c;转载须注明出处】 需要有Linux使用基础&#xff0c;自行准备 1、VM17 Pro &#xff08;自行搜索教程安装&#xff09; 2、ubuntu-24.04-desktop-amd64 &#xff0…...

数据仓库分层存储设计:平衡存储成本与查询效率

数据仓库分层存储不仅是一个技术问题,更是一种艺术:如何在有限的资源下,让数据既能快速响应查询,又能以最低的成本存储? 目录 一、什么是数据仓库分层存储? 二、分层存储的体系架构 1. 数据源层(ODS,Operational Data Store) 2. 数据仓库层(DW,Data Warehouse)…...

matlab求和∑函数方程编程?

matlab求和∑函数方程编程&#xff1f; 一 题目&#xff1a;求下列函数方程式的和 二&#xff1a;代码如下&#xff1a; >> sum_result 0; % 初始化求和变量 for x 1:10 % 设…...

基于Java+MySQL实现的(Web)科研资讯推送系统

科研资讯推送系统 技术选型 核心框架&#xff1a;SpringBoot 数据库层&#xff1a;springdatajpa 安全框架&#xff1a;Shiro 数据库连接池&#xff1a;Druid 缓存&#xff1a;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、在进行比较的时候&#xff0c;会先将两边的变量类型转化成相同的&#xff0c;再进行比较 2、0e在比较的时候会将其认…...

​asm汇编源代码之-汉字点阵字库显示程序源代码下载​

汉字点阵字库显示程序 源代码下载 文本模式下显示16x16点阵汉字库内容的程序(标准16x16字库需要使用CHGHZK转换过后才能使用本程序正常显示) 本程序需要调用file.asm和string.asm中的子程序,所以连接时需要把它们连接进来,如下 C:\> tlink showhzk file string 调用参…...

Excel 中让表格内容自适应列宽和行高

Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…...

从 Vue 到 React:深入理解 useState 的异步更新

目录 从 Vue 到 React&#xff1a;深入理解 useState 的异步更新与函数式写法1. Vue 的响应式回顾&#xff1a;每次赋值立即生效2. React 的状态更新是异步且批量的原因解析 3. 函数式更新&#xff1a;唯一的正确写法4. 对比 Vue vs React 状态更新5. React useState 的核心源码…...

Java使用ANTLR4对Lua脚本语法校验

文章目录 什么是ANTLR&#xff1f;第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Grammar文件maven配置生成Lexer Parser Listener Visitor代码新建实体类Lua语法遍历器语法错误监听器单元测试 参考 什么是ANTLR&#xff1f; https://www.antlr.org/ ANTLR (ANothe…...

vue3.2 + element-plus 实现跟随input输入框的弹框,弹框里可以分组或tab形式显示选项

效果 基础用法&#xff08;分组选项&#xff09; 高级用法&#xff08;带Tab栏&#xff09; <!-- 弹窗跟随通用组件 SmartSelector.vue --> <!-- 弹窗跟随通用组件 --> <template><div class"smart-selector-container"><el-popove…...

Vue 2.0和3.0笔记

Vue 3 关于组件 今天回顾了下2.0关于组件的内容&#xff0c;3.0定义组件的方式多了一种就是通过单文件组件&#xff08;Single-File Component&#xff09;的方式将Vue的模板&#xff0c;逻辑和样式放到一个文件中&#xff0c;2.0则不同&#xff0c;它是将模板放到一个属性中…...

Windows VsCode Terminal窗口使用Linux命令

背景描述&#xff1a; 平时开发环境以Linux系统为主&#xff0c;有时又需要使用Windows系统下开发环境&#xff0c;为了能像Linux系统那样用Windows VsCode&#xff0c;Terminal命令行是必不可少内容。 注&#xff1a;Windows11 VsCode 1.99.2 下面介绍&#xff0c;如何在V…...

负载均衡的实现方式有哪些?

负载均衡实现方式常见的有: 软件负载均衡、硬件负载均衡、DNS负载均衡 扩展 二层负载均衡&#xff1a;在数据链路层&#xff0c;基于MAC地址进行流量分发&#xff0c;较少见于实际应用中 三层负载均衡&#xff1a;在网络层&#xff0c;基于IP地址来分配流量&#xff0c;例如某…...

Oracle 中的 NOAUDIT CREATE SESSION 命令详解

Oracle 中的 NOAUDIT CREATE SESSION 命令详解 NOAUDIT CREATE SESSION 是 Oracle 数据库中用于取消对用户登录会话审计的命令&#xff0c;它与 AUDIT CREATE SESSION 命令相对应。 一、基本语法 NOAUDIT CREATE SESSION [BY user1 [, user2]... | BY [SESSION | ACCESS]] …...

OutputStreamWriter 终极解析与记忆指南

OutputStreamWriter 终极解析与记忆指南 一、核心本质 OutputStreamWriter 是 Java 提供的字符到字节的桥梁流&#xff0c;属于 Writer 的子类&#xff0c;负责将字符流按指定编码转换为字节流。 注意&#xff1a;OutputStreamWriter也是一个字符流&#xff0c;也是一个转换…...

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&#xff1a;可靠性强&#xff0c;有重传机制 UDP&#xff1a;单传机制&#xff0c;不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层&#xff0c;构成LWIP内核程序&#xff1a; 链路层&#xff1b;由mac内核STM芯片的片上外设…...

Nodejs Express框架

参考&#xff1a;Node.js Express 框架 | 菜鸟教程 第一个 Express 框架实例 接下来我们使用 Express 框架来输出 "Hello World"。 以下实例中我们引入了 express 模块&#xff0c;并在客户端发起请求后&#xff0c;响应 "Hello World" 字符串。 创建 e…...

LeetCode面试热题150中19-22题学习笔记(用Java语言描述)

Day 04 19、最后一个单词的长度 需求&#xff1a;给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 代码表示 public class Q19_1 {p…...

道路运输安全员企业负责人考试内容与范围

道路运输企业主要负责人&#xff08;安全员&#xff09;考证要求 的详细说明&#xff0c;适用于企业法定代表人、分管安全负责人等需取得的 《道路运输企业主要负责人和安全生产管理人员安全考核合格证明》&#xff08;交通运输部要求&#xff09;。 考试内容与范围 1. 法律法…...

Visual Studio Code 开发 树莓派 pico

开发环境 MCU&#xff1a;Pico1&#xff08;无wifi版&#xff09;使用固件&#xff1a;自编译版本开发环境&#xff1a;Windows 10开发工具&#xff1a;Visual Studio Code 1.99.2开发语言&#xff1a;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包解决跨域问题时&#xff0c;还是存在问题的原因。 今天我在使用express框架写一个后台管理系统时&#xff0c;发现存在这样的问题&#xff0c;那就是跨域问题&#xff0c;但是我明明是使用了 cors 包解决了跨域问题了。当我调用其他接口的时候&#xff0…...

Python与R语言用XGBOOST、NLTK、LASSO、决策树、聚类分析电商平台评论信息数据集

全文链接&#xff1a;https://tecdat.cn/?p41501 分析师&#xff1a;Rui Liu 在当今数字化浪潮席卷的时代&#xff0c;电商市场的蓬勃发展犹如一部波澜壮阔的史诗&#xff0c;蕴藏着无尽的商业价值与潜力。电商平台积累的海量数据&#xff0c;宛如一座等待挖掘的宝藏&#xff…...

半导体制造如何数字化转型

半导体制造的数字化转型正通过技术融合与流程重构&#xff0c;推动着这个精密产业的全面革新。全球芯片短缺与工艺复杂度指数级增长的双重压力下&#xff0c;头部企业已构建起四大转型支柱&#xff1a; 1. 数据中枢重构产线生态 台积电的「智慧工厂4.0」部署着30万物联网传感器…...

LabVIEW 程序持续优化

LabVIEW 以其独特的图形化编程方式&#xff0c;在工业自动化、测试测量、数据分析等众多领域发挥着关键作用。为了让 LabVIEW 程序始终保持高效、稳定&#xff0c;并契合不断变化的实际需求&#xff0c;持续改进必不可少。下面将从多个关键维度&#xff0c;为大家细致地介绍通用…...

Windows10系统RabbitMQ无法访问Web端界面

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目场景&#xff1a; 在一个基于 .NET 的分布式项目中&#xff0c;团队使用 RabbitMQ 作为消息队列中间件&#xff0c;负责模块间的异步通信。开发环境为 Windows 10 系统&#xff0c;开发人员按照官…...

初阶数据结构--链式二叉树

二叉树&#xff08;链式结构&#xff09; 前面的文章首先介绍了树的相关概念&#xff0c;阐述了树的存储结构是分为顺序结构和链式结构。其中顺序结构存储的方式叫做堆&#xff0c;并且对堆这个数据结构进行了模拟实现&#xff0c;并进行了相关拓展&#xff0c;接下来会针对链…...