python 常用数据结构-集合

news2024/11/15 4:57:29

Set集合

  • Set 集合
    • 集合定义
    • 集合使用:创建
    • 集合使用:成员检测
    • 集合方法
      • 集合方法 add()
      • 集合方法 update()
      • 集合方法 remove()
      • 集合方法 discard()
      • 集合方法 pop()
      • 集合方法 clear()
    • 集合运算
      • 集合运算:交集
      • 集合运算:并集
      • 集合运算:差集
    • 集合推导式

Set 集合

  • 集合定义与使用
  • 集合常用方法
  • 集合推导式

集合定义

  • 无序的唯一对象集合
  • 用大括号{}包围,对象相互之间使用逗号分隔
  • 集合是动态的,可以随时添加或删除元素
  • 集合是异构的,可以包含不同类型的数据

集合使用:创建

  • 创建
    • 通过使用{}填充元素
    • 通过构造方法 set()
    • 通过集合推导式
"""创建集合"""
# 1、使用大括号{}填充元素
st4 = {1, 2, 3}
st5 = {'a', 'b', 'c'}

# 2、使用构造方法创建集合
st1 = set()  # 空集合
st2 = set('hogwarts')
print(type(st2), st2)  # <class 'set'> {'w', 's', 'g', 't', 'o', 'r', 'h', 'a'}
set3 = set([1, 2, 3])
print(type(set3), set3)  # <class 'set'> {1, 2, 3}
set4 = set()
print(type(set4), set4)  # <class 'set'> set()

# 3、使用集合推导式
li = [1, 1, 2, 2, 3, 3]
st3 = set(li)
st6 = {x for x in li}
print(st6)  # {1, 2, 3}

set6 = {i for i in range(5) if i % 2 == 0}
print("set6的数据是:",set6) # set6的数据是: {0, 2, 4}


# 注意:不要单独使用{ }来创建空集合
st7 = {}  # 这是字典类型
print(type(st7))  # <class 'dict'>

集合使用:成员检测

  • in
    • 判断元素是否在集合中存在
  • not in
    • 判断元素是否在集合中不存在
"""集合使用:成员检测"""
st = {1, 2, 3, 4, 5}
# in
print(2 in st)

# not in
print(99 not in st)

集合方法

  • add()
  • update()
  • remove()
  • discard()
  • pop()
  • clear()

集合方法 add()

  • add(item):将单个对象添加到集合中
  • 入参:对象 item
  • 返回:None
"""集合方法 add()"""
# 添加元素
st = {1, 2, 3}
st.add(99)
st.add('hogwarts')
print(st) # {1, 2, 99, 3, 'hogwarts'}

集合方法 update()

  • update(iterable)

  • 批量添加来自可迭代对象中的所有元素

  • 入参:可迭代对象 iterable

  • 返回:None

"""集合方法 update()"""
li = [1, 2, 3]
tup = (2, 3, 4)
st = {'a', 'b', 'c'}

# 1、批量添加列表中的元素
st1 = set()
st1.update(li)
print(st1) # {1, 2, 3}
# 2、批量添加元组中的元素
st1.update(tup)
print(st1) # {1, 2, 3, 4}
# 3、批量添加集合中的元素
st1.update(st)
print(st1) # {1, 2, 3, 4, 'b', 'c', 'a'}

集合方法 remove()

  • remove(item):从集合中移除指定元素 item。
  • 入参:指定元素值
  • 返回:None
  • 如果 item 不存在于集合中则会引发 KeyError
"""集合方法 remove()"""
# 1、删除已存在的元素
st2 = {1, 2, 3, 4, 5}
st2.remove(2)
print(st2) # {1, 3, 4, 5}

# 2、删除不存在的元素
st2.remove(1024)  # KeyError: 1024

集合方法 discard()

  • discard(item):从集合中移除指定对象 item。
  • 入参:指定对象值
  • 返回:None
  • 元素 item 不存在没影响,不会抛出 KeyError 错误。
"""集合方法 discard()"""
# 1、删除已存在的元素
st3 = {1, 2, 3, 4, 5}
st3.remove(3)
print(st3) # {1, 2, 4, 5}

# 2、删除不存在的元素
st3.discard(1024)
print(st3) # {1, 2, 4, 5}

集合方法 pop()

  • pop():随机从集合中移除并返回一个元素。
  • 入参:无。
  • 返回:被移除的元组。
  • 如果集合为空则会引发 KeyError。
"""集合方法 pop()"""

# 1、随机删除某个对象
st4 = {8, 10, 3, 4, 5}
item = st4.pop()
# item是删除的元素
print(item, st4)  # 3 {4, 5, 8, 10}

# 2、集合本身为空会报错
st = set()
# st.pop()  # KeyError

集合方法 clear()

  • clear():清空集合,移除所有元素
  • 入参:无
  • 返回:None
"""集合方法 clear()"""

# 1、清空集合
st = {1, 2, 3, 4, 5}
st.clear()

集合运算

  • 交集运算
  • 并集运算
  • 差集运算

集合运算:交集

  • 交集运算

  • intersection()

  • 操作符:&

在这里插入图片描述

"""集合运算:交集"""
set1 = {1, 3, 2}
set2 = {2, 4, 3}
print(set1.intersection(set2)) # {2, 3}
print(set1 & set2) # {2, 3}



集合运算:并集

  • 并集运算

  • union()

  • 操作符:|

在这里插入图片描述

"""集合运算:并集"""

# 求两个集合的并集
set1 = {1, 3, 2}
set2 = {2, 4, 3}
print(set1.union(set2)) # {1, 2, 3, 4}
print(set1 | set2) # {1, 2, 3, 4}

集合运算:差集

  • 差集运算

  • difference()

  • 操作符: -

在这里插入图片描述

"""集合运算:差集"""
# 集合求差集
# 集合求差集
set1 = {1, 3, 2}
set2 = {2, 4, 3}

print(set1.difference(set2)) # {1}
print(set1 - set2) # {1}


集合推导式

  • 类似列表推导式,同样集合支持集合推导式
  • 语法:{x for x in ... if ...}
# 使用推导式生成集合
"""集合推导式"""
# 寻找hoqwarts与hello world的共相同字母
# 使用推导式生成集合,先执行for循环,在执行if循环
st = {x for x in 'hogwarts' if x in 'hello world'}
print(st) # {'r', 'h', 'w', 'o'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA结课作品——超市管理系统

项目描述&#xff1a;一个简单的超市管理系统&#xff0c;能够实现用户登入和注册功能&#xff0c;共分为前台和后台两个主要界面&#xff0c;普通用户界面操作权限收到限制&#xff0c;只能对商品和销售记录进行简单查询操作&#xff0c;后台中可以进行商品的删除、修改、查询…

Java 设计模式——单例模式

目录 1.结构2.实现2.1.饿汉式2.1.1.静态变量2.1.2.静态代码块2.1.3.枚举方式 2.2.懒汉式2.2.1.synchronized 线程安全2.2.2.双重检查锁2.2.3.静态内部类方式 3.破坏单例模式3.1.序列化反序列化3.2.反射 4.问题解决5.JDK 源码解析——Runtime 类 1.结构 &#xff08;1&#xff…

03-MySQL-基础篇-SQL之DDL语句

SQL之DDL语句 前言DDL数据库操作表操作查询操作数据类型案例修改删除 前言 *本篇来学习下SQL中的DDL语句 DDL 全称Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 数据库操作 查询所有数据库 s…

数字与字符的对决:力扣“将所有数字用字符替换”的独特方法

本篇博客会讲解力扣“1844. 将所有数字用字符替换”的解题思路&#xff0c;这是题目链接。 本题的解题思路是&#xff1a;遍历字符串&#xff0c;按照题目描述修改字符。 有一个需要注意的点&#xff1a;循环的结束条件是什么呢&#xff1f;是s[i] ! \0’吗&#xff1f;不是的…

多线程(2):线程同步

线程同步是在多线程编程过程中对数据保护的一种机制&#xff0c;保护的数据是共享数据。共享数据就是多个线程共同访问的一块资源&#xff0c;也就是一块内存。假设有3个线程&#xff0c;其中A,B线程在同一个时间点往这块内存中写数据&#xff0c;于此同时C线程往这块内存中读数…

视频编码流程 YUV数据编码为H264数据

文章目录 1.视频编码流程2.实战demo3.相关编码知识点讲解1. 参数设置问题:2. 关于av_opt_set3. 关于码流设置 1.视频编码流程 2.实战demo #ifndef MAINBACK_C #define MAINBACK_C #endif // MAINBACK_C #include <stdint.h> #include <stdio.h> #include <stdl…

火车头采集器AI伪原创[php源码]

本文介绍php版本的火车头采集器AI伪原创&#xff0c;对于网站的原创内容&#xff0c;站长朋友们一定很头疼。作为一个草根站长&#xff0c;自己写原创文章太累了。当然&#xff0c;我并不是说你不能写。自己写原创文章是不现实的。时间是最大的问题。 也许有的站长朋友会问&…

自定义封装Mybatis的过程

手写持久层框架思路分析&#xff1a; 步骤1:加载数据库配置信息&#xff0c;包括数据库url&#xff0c;端口&#xff0c;数据库名字&#xff1b;加载所有sqlmapper文件。 步骤2: 创建javaBean&#xff0c;全局配置类&#xff0c;Configuration&#xff0c;映射配置类&#xff…

香橙派和树莓派基于官方外设开发

香橙派和树莓派基于官方外设开发 1.wiringPi外设SDK安装 方式一&#xff1a; git clone https://github.com/orangepi-xunlong/wiringOP //下载源码 cd wiringOP //进入文件夹 sudo ./build clean //清除编译信息 sudo ./build //编译方式二 通过windows浏览器打开https://…

全网最新网络安全学习路线

在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 我把自己整理的系统学习路线&#xff0c;拿出来跟大家分享了&#xff01;点击查看详细路线图 建议的学习顺序&#xff1a; 一、网络安全学习普法&#xff08;心里有个数&#xff0c;要进去坐几年&#xf…

Java入门教程||Java 网络编程||Java 发送邮件

Java 网络编程 网络编程是指编写运行在多个设备&#xff08;计算机&#xff09;的程序&#xff0c;这些设备都通过网络连接起来。 java.net包中J2SE的API包含有类和接口&#xff0c;它们提供低层次的通信细节。你可以直接使用这些类和接口&#xff0c;来专注于解决问题&#…

基于simulink视频处理系统多核仿真(附源码)

一、前言 此示例演示如何使用 Simulink中的数据流执行域在多个内核上运行视频处理系统。 数据流执行域允许您在计算密集型系统的设计中使用多个内核。此示例演示数据流作为子系统的执行域如何提高模型的模拟性能。 二、视频中的对象计数 此示例演示如何使用基本形态运算符从…

Docker部署Doris超详细图文教程

Doris安装有非常多的方法&#xff0c;这里主要介绍Docker中使用dev容器用来学习和测试的方法&#xff0c;避免在其他教程中踩坑(生产环境不建议使用Docker安装) 这里介绍一个不踩坑的docker本地单机版&#xff0c;笔者安装环境为Windows下的Docker&#xff0c;若为Linux系统安装…

SwiftUI + Swift 设备振动

如何让设备振动呢 iPhone 6S 3D Touch&#xff0c;可以识别轻&#xff0c;中&#xff0c;重三种按压力度&#xff0c;配合恰到好处的振动有利于提升交互体验&#xff0c;但后面的新设备都不支持 3D Touch 了&#xff0c;改为了检测按压时间&#xff0c;按同一个图标&#xff0…

如何用canvans实现地图上的运动轨迹

1.先需要一个地图的图片 2.通过canvas绘制出运动轨迹 // 创建渐变function createGradient(context, p0, p1) {const gradient context.createLinearGradient(p0.x, p0.y, p1.x, p1.y);gradient.addColorStop(0, "rgba(255, 0, 255, 0)");gradient.addColorStop(1,…

颜色渐变的数据密集适用的堆叠图

一般情况会用柱状图去堆叠&#xff0c;但是如果数据量太大了&#xff0c;就可考虑这种方式堆叠。可以呈现时间和数量上不同层次数据的变化。 效果图&#xff1a; 比较详细的注释一下源码&#xff1a; import matplotlib as mpl import matplotlib.pyplot as plt import numpy …

第七章:L2JMobius学习 – 登录服务LoginServer讲解

在上一个章节中&#xff0c;我们学习了网络数据传输的封装network。那么&#xff0c;在本章的登录服务LoginServer的讲解中&#xff0c;我们就来使用一下这个封装好的功能。Network的封装需要我们继承很多的接口或类。我们首先查看一下登录服务LoginServer的文件结构&#xff0…

[Android 13]Binder系列--获取ServiceManager

获取ServiceManager hongxi.zhu 2023-7-1 以SurfaceFlinger为例&#xff0c;分析客户端进程如何获取ServiceManager代理服务对象 主要流程 SurfaceFlinger中获取SM服务 frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp // publish surface flingersp<…

mysql单表查询,排序,分组查询,运算符

CREATE TABLE emp (empno int(4) NOT NULL, --员工编号ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,--员工名字job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,--员工工作mgr int(4) NULL DEFAULT NU…

随机产生50个100以内的不重复的整数,设计位图排序算法进行排序。

1.问题 随机产生50个100以内的不重复的整数&#xff0c;设计位图排序算法进行排序。 2.设计思路 阶段1&#xff1a; 初始化一个空集合    for i[0,n)    bit[i]0 阶段2&#xff1a; 读入数据i&#xff0c;并设置bit[i]1    for each i in the input file    bit[i]1…