萌新学 Python 之集合 set

集合 set:使用一对大括号,元素写在大括号之间,使用逗号分隔

集合中的元素只能是不可变的数据类型,不能是列表、字典和集合

set1 = {1, 2, 3}
set2 = {1, 'a', (1, 2, 3)}
print(type(set1), type(set2))  # <class 'set'> <class 'set'>
print(set1, set2)  # {1, 2, 3} {1, 'a', (1, 2, 3)}

集合自动去重且无序

set3 = {3, 3, 2, 2, 1, 1}
print(set3)        # {1, 2, 3}

集合需要注意以下几点:

1.集合属于可变的数据类型

2.集合有去重功能,对元素自动去重

3.集合的元素只能是不可变的类型(数值、字符串、元组),不能使用列表、字典、集合

4.集合 set 与字典 map,都是以 hash 值分布存储,是无序的数据结构

5.空集合不能直接使用一对大括号,空字典才使用 { }

可以使用 set 创建集合

格式:set(可迭代对象)

对象为字典,获取字典的键 key

set4 = set()
print(type(set4), set4)       # <class 'set'> set()# 对象为字符串,去重且无序
set5 = set('Hello')
print(type(set5), set5)       # <class 'set'> {'H', 'o', 'l', 'e'}# 对象为列表、元组、集合
set6 = set((1, 2))
print(type(set6), set6)       # <class 'set'> {1, 2}# 对象为字典,获取字典的键key
set7 = set({'name': 'zhangsan', 'age': 18})
print(type(set7), set7)       # <class 'set'> {'name', 'age'}

集合的运算与运算符:

交集 &     并集 |     补集 ^     差集 -

交集 & ,返回两个集合中出现相同的元素,intersection

并集 | ,返回两个集合的全部元素,union

补集 ^ ,返回两个集合中不同的元素,symmetric_difference

差集 - ,对两个集合进行减法运算,difference

# 交集 &,返回两个集合中出现相同的元素
s1 = {1, 2, 3, 4, 5}
s2 = {1, 2, 3, 8, 9}
print(s1 & s2)                # {1, 2, 3}
print(s1.intersection(s2))    # {1, 2, 3}# 并集 |,返回两个集合的全部元素
s3 = {1, 2, 3}
s4 = {2, 3, 4}
print(s3 | s4)         # {1, 2, 3, 4}  集合去重
print(s3.union(s4))    # {1, 2, 3, 4}# 补集 ^,返回两个集合中不同的元素
s5 = {1, 2, 3, 4, 5}
s6 = {1, 2, 3}
print(s5 ^ s6)                           # {4, 5}
print(s5.symmetric_difference(s6))       # {4, 5}# 差集 -,对两个集合进行减法运算
s7 = {1, 2, 3, 4, 5}
s8 = {4, 5, 6, 7, 8}
print(s7 - s8)               # {1, 2, 3}
print(s7.difference(s8))     # {1, 2, 3}
print(s8 - s7)               # {8, 6, 7}   集合无序
print(s8.difference(s7))     # {8, 6, 7}

集合更新 update:原集合上更新新集合

集合 1.intersection_update(集合 2),把交集后的元素更新到集合 1 中

集合 1.update(集合 2),把并集后的元素更新到集合 1 中

集合 1.symmetric_difference_update(集合 2),把补集后的元素更新到集合 1 中

集合 1.difference_update(集合 2),把差集后的元素更新到集合 1 中

# 交集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.intersection_update(set9)
print(set8)      # {3}# 并集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.update(set9)
print(set8)      # {1, 2, 3, 4, 5}# 补集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.symmetric_difference_update(set9)
print(set8)     # {1, 2, 4, 5}# 差集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.difference_update(set9)
print(set8)    # {1, 2}

集合增加元素:add(元素)

集合增加的元素只能是不可变的数据类型,比如数值、字符串和元组

不能是列表、字典这些可变的数据类型,否则会报错

set10 = set()      # 空集合
set10.add(1)
set10.add('a')
set10.add((1, 'a'))
print(set10)       # {(1, 'a'), 1, 'a'}

集合元素的删除:

1. pop(),随机删除

2. remove(指定元素),删除指定元素,元素不存在则报错

set11 = {1, 'a', 2, 'b'}
# remove(指定元素) 删除
print(set11.remove('b'))       # None
print(set11)                   # {1, 2, 'a'}

3. clear(),清空集合的元素,返回空集合

set11 = {1, 'a', 2, 'b'}
# clear(),清空集合的元素,返回空集合
set11.clear()
print(set11)          # set()

4. discard(指定元素),删除指定元素,元素不存在,不会报错

set11 = {1, 'a', 2, 'b'}
# discard(指定元素),元素不存在,不会报错
print(set11.discard('c'))     # None
print(set11)                  # {1, 2, 'a', 'b'}

is 开头的函数用来做判断,结果返回布尔值 True、False

集合 1.issubset(集合 2),判断集合 1 是否是集合 2 的子集,如果是返回 True,不是则返回 False

集合 1.issuperset(集合 2),判断集合 2 是否是集合 1 的子集,如果是返回 True,不是则返回 False

集合 1.isdisjoint(集合 2),判断两个集合是否有相同的元素,有相同元素返回 False,没有相同元素返回 True

set12 = {1, 2, 3}
set13 = {1, 2, 3, 4, 5}
# 集合1.issubset(集合2),判断集合 1 是否是集合 2 的子集
print(set12.issubset(set13))     # True# 集合1.issuperset(集合2),判断集合 2 是否是集合 1 的子集
print(set13.issuperset(set12))   # True# 集合1.isdisjoint(集合2),判断两个集合是否有相同的元素,有相同元素返回 False,没有相同元素返回 True
print(set12.isdisjoint(set13))   # False

copy 浅拷贝:

set14 = {1, 2, 3, 4, 5}
set15 = set14.copy()
print(set14, id(set14))    # {1, 2, 3, 4, 5} 2100890355520
print(set15, id(set15))    # {1, 2, 3, 4, 5} 2100890355744
print(set14 is set15)      # False

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

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

相关文章

python中使用数据库sqlite3

Python使用sqlite3数据库 python3.x标准库内置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 显示 导入模块连接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…

maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时

1、问题背景&#xff1a;maven使用默认settings.xml配置时&#xff0c;Idea基于pom.xml更新依赖时报错&#xff0c;有些组件下载时连接超时&#xff0c; 通过日志发下&#xff0c;去连接maven.org网站下载依赖&#xff0c;有时候肯定会超时。 2、解决办法&#xff1a;使用国外…

小狐狸ai3.1.2版本源码无授权版本内 含搭建教程+各种上线教程

内容目录 一、详细介绍小狐狸3.1.2版本源码&#xff0c;新增deepseek接口 文件夹说明&#xff1a; 1、后端&#xff1a;文件夹是后台文件 5、.sql文件是数据库文件后台安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用7.4&#xff0c;将“后端”文件夹里的文件…

C#之上位机开发---------C#通信库及WPF的简单实践

〇、上位机&#xff0c;分层架构 界面层 要实现的功能&#xff1a; 展示数据 获取数据 发送数据 数据层 要实现的功能&#xff1a; 转换数据 打包数据 存取数据 通信层 要实现的功能&#xff1a; 打开连接 关闭连接 读取数据 写入数据 实体类 作用&#xff1a; 封装数据…

Python Django 入门教程

Django 构建一个完整的博客平台,包含用户认证、评论、权限控制等功能。 环境搭建 安装依赖 先确保已经安装了 Python 环境,并通过 pip 安装 Django 及其它依赖: pip install django pip install djangorestframework创建项目和应用 创建一个 Django 项目并进入该项目目录:…

今日行情明日机会——20250217

2025年02月17日行情 后续投资机会分析 根据最新盘面信息&#xff0c;以下板块和个股具备潜在投资机会&#xff0c;需结合市场动态和基本面进一步验证&#xff1a; 1. 腾讯系AI&#xff08;18家涨停&#xff09; 核心逻辑&#xff1a;涨停家数最多&#xff08;18家&#xff0…

常见的IP地址分配方式有几种:深入剖析与适用场景‌

在数字互联的世界里&#xff0c;IP地址如同网络世界的“门牌号”&#xff0c;是设备间通信的基础。随着网络技术的飞速发展&#xff0c;IP地址的分配方式也日趋多样化&#xff0c;以适应不同规模、不同需求的网络环境。本文将深入探讨当前主流的几种IP地址分配方式&#xff0c;…

快速搭建 OLLAMA + DeepSeek 模型并对接 Cherry Studio

快速搭建 OLLAMA DeepSeek 模型并对接 Cherry Studio 本文将指导您在基于 GPU 的 Ubuntu 服务器上快速搭建 OLLAMA&#xff0c;部署 DeepSeek 模型&#xff0c;并接入 Cherry Studio 进行使用。 环境说明 GPU 服务器: GeForce RTX 2080 Ti, 16 核, 64G 内存系统: Ubuntu 24.…

floodfill算法系列一>扫雷游戏

目录 题目思路&#xff1a;代码设计&#xff1a;代码呈现&#xff1a; 题目思路&#xff1a; 代码设计&#xff1a; 代码呈现&#xff1a; class Solution {int m,n;int[] dx {0,0,-1,1,-1,-1,1,1};int[] dy {-1,1,0,0,-1,1,-1,1};public char[][] updateBoard(char[][] boa…

Java 中操作文件

文章目录 Java 中操作文件File 概述属性构造方法方法代码示例文件内容的读写--数据流InputStream 概述常用方法FileInputStream 概述构造方法常用方法代码示例通过 Scanner 进行字符读取FileReaderOutputStream 概述常用方法FileOutputStream 概述构造方法常用方法代码示例File…

什么是RDD以及它在Spark中的作用

RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff0c;即弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。以下是对RDD的详细解释以及它在Spark中的作用&#xff1a; 一、RDD的定义与特性 定义&#xff1a; RDD是一个不可变、可分区、里面的元素可并…

【附带脚本】解决notion加载慢问题

问题原因 notion网站的服务器在国外&#xff0c;因为网络问题&#xff08;国际出口带宽限制&#xff09;导致访问速度较慢和域名解析延迟等问题。 解决方案 通过在 hosts 文件中直接指定一个更快的 IP 地址&#xff08;例如国内镜像服务器&#xff09;&#xff0c;可以显著提…

Banana Pi OpenWRT One 官方路由器的第一印象

OpenWRT One是OpenWRT开源社区推出的首款官方开发板&#xff0c;与Banana Pi社区共同设计&#xff0c;由Banana Pi制造和发行。路由器采用蓝色铝合金外壳&#xff0c;质感极佳&#xff0c;视觉效果远超宣传图。整体设计简洁&#xff0c;呈长方形&#xff0c;虽然不是特别时尚&a…

【信息学奥赛一本通 C++题解】1285:最大上升子序列和

信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 基础算法 第一节 动态规划的基本模型 1285&#xff1a;最大上升子序列和 “最大上升子序列和”问题课堂讲解 1. 理解题意 同学们&#xff0c;想象我们有一串数字&#xff0c;就像一串彩色的珠子&#xff0c;每个珠子…

刷题记录Day4(补)

24. 两两交换链表中的节点 ① 使用虚拟节点 ② 最后返回头结点的时候&#xff0c;head 本来的头节点已经和第二位交换了&#xff0c;需要重新赋值 ③ 使用临时指针保存变量 ④ 如果是空的不用特殊判断&#xff0c;空的返回头节点也还是空的 class Solution { public:ListNo…

花西子携手赛博威共创新品创新平台,驱动“新质美力”高质量发展

国货彩妆品牌花西子与赛博威信息科技达成【新品创新平台】项目合作&#xff0c;共探“新质美力”的高质量发展路径。 近日&#xff0c;赛博威信息科技CEO陈国平携团队走进花西子“百年之诗”馆&#xff0c;深入了解花西子的品牌理念、企业文化及百年愿景&#xff0c;并与花西子…

[JVM篇]垃圾回收器

垃圾回收器 Serial Seral Old PartNew CMS(Concurrent Mark Sweep) Parallel Scavenge Parallel Old G1 ZGC

在VScode内接入deepseek(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama&#xff0c;我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后&#xff0c;依次点击添加模型 5. 在这里可以添加&#xff0c;各种各样的模型&#xff0c;选择我们的ollama 6. 选…

[题解]2024CCPC重庆站-小 C 的神秘图形

Sources&#xff1a;K - 小 C 的神秘图形Abstract&#xff1a;给定正整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105)&#xff0c;三进制字符串 n 1 , n 2 ( ∣ n 1 ∣ ∣ n 2 ∣ n ) n_1,n_2(|n_1||n_2|n) n1​,n2​(∣n1​∣∣n2​∣n)&#xff0c;按如下方法…

AI外呼机器人:营销新利器还是骚扰电话的升级版?

"您好&#xff0c;这里是XX房产&#xff0c;最近有购房需求吗&#xff1f;""您好&#xff0c;您最近有种牙需求吗&#xff1f;" 相信很多人都接到过类似的营销电话&#xff0c;而电话那头&#xff0c;很可能已经不是真人&#xff0c;而是AI外呼机器人。 近…