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

上手Python之set(集合)

为什么使用集合

我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。 为何又需要学习新的集合类型呢?

通过特性来分析:

列表可修改、支持重复元素且有序

元组、字符串不可修改、支持重复元素且有序

有没有看出一些局限?

局限就在于:它们都支持重复元素。

如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。

而集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序

集合的定义

基本语法:

和列表、元组、字符串等定义基本相同:

列表使用:[]

元组使用:()

字符串使用:""

集合使用:{} 

 

 

结果中可见:

去重且无序

因为要对元素做去重处理

所以无法保证顺序和创建的时候一致 

集合的常用操作 - 修改 

首先,因为集合是无序的,所以集合不支持:下标索引访问

但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法。

添加新元素    

 语法:集合.add(元素)。将指定元素,添加到集合内      

结果:集合本身被修改,添加了新元素

移除元素      

语法:集合.remove(元素),将指定元素,从集合内移除      

结果:集合本身被修改,移除了元素 

从集合中随机取出元素      

语法:集合.pop(),功能,从集合中随机取出一个元素      

结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

清空集合      

语法:集合.clear(),功能,清空集合      

结果:集合本身被清空 

取出2个集合的差集      

语法:集合1.difference(集合2)

功能:取出集合1和集合2的差集(集合1有而集合2没有的)      

结果:得到一个新集合,集合1和集合2不变 

消除2个集合的差集      

语法:集合1.difference_update(集合2)      

功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。      

结果:集合1被修改,集合2不变 

 2个集合合并      

语法:集合1.union(集合2)    

 功能:将集合1和集合2组合成新集合      

结果:得到新集合,集合1和集合2不变

集合的常用操作 - 集合长度 

 查看集合的元素数量      

语法:len(集合)    

 功能:统计集合内有多少元素    

 结果:得到一个整数结果

集合的常用操作 - for循环遍历 

集合同样支持使用for循环遍历

要注意:集合不支持下标索引,所以也就不支持使用while循环。

 

编号

操作

说明

1

集合.add(元素)

集合内添加一个元素

2

集合.remove(元素)

移除集合内指定的元素

3

集合.pop()

从集合中随机取出一个元素

4

集合.clear()

将集合清空

5

集合1.difference(集合2)

得到一个新集合,内含2个集合的差集

原有的2个集合内容不变

6

集合1.difference_update(集合2)

在集合1中,删除集合2中存在的元素

集合1被修改,集合2不变

7

集合1.union(集合2)

得到1个新集合,内含2个集合的全部元素

原有的2个集合内容不变

8

len(集合)

得到一个整数,记录了集合的元素数量

相关文章:

  • Visual Studio 2022开发Arduino详述
  • 【机器人定位引导中的机器视觉技术】
  • 零售商贩mysql表设计:主题信息表(theme)
  • 本文带你了解透彻云计算(前世,今生,未来)
  • ARM发布Cortex-X3和Cortex-A715
  • 麻雀算法极限学习机SSA-ELM回归预测及其MATLAB代码实现
  • 云原生DevOps篇:jenkins发送通知到企业微信机器人
  • LeetCode337:打家劫舍III
  • 【飞桨PaddleSpeech语音技术课程】— 语音识别-流式服务-模型部分
  • isomap降维算法--学习笔记
  • 【Linux】yum vim 基础工具的使用
  • QT学习_03_坐标系统和内存回收机制
  • cookies,session,token都是相对安全,并不能完全防窃取
  • 在Ubuntu22.04条件下,如何打开树莓派4B的串口
  • 初识Docker
  • 3.7、@ResponseBody 和 @RestController
  • Github访问慢解决办法
  • JAVA SE 6 GC调优笔记
  • Leetcode 27 Remove Element
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Redis 中的布隆过滤器
  • 初识MongoDB分片
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 给新手的新浪微博 SDK 集成教程【一】
  • 力扣(LeetCode)965
  • 如何编写一个可升级的智能合约
  • 听说你叫Java(二)–Servlet请求
  • 协程
  • 一个JAVA程序员成长之路分享
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 怎么把视频里的音乐提取出来
  • scrapy中间件源码分析及常用中间件大全
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #stm32整理(一)flash读写
  • #WEB前端(HTML属性)
  • $NOIp2018$劝退记
  • (已解决)什么是vue导航守卫
  • (原)Matlab的svmtrain和svmclassify
  • (转)关于多人操作数据的处理策略
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)我也是一只IT小小鸟
  • .NET CLR Hosting 简介
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 托管代码与非托管代码
  • .net 无限分类
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET开发者必备的11款免费工具
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ 转载 ] SharePoint 资料
  • [C]编译和预处理详解
  • [C++]类和对象(中)
  • [CF494C]Helping People
  • [CISCN2019 华东南赛区]Web4
  • [delphi]保证程序只运行一个实例
  • [Django 0-1] Core.Email 模块