Python集合的基本概念和使用方法
目录
集合(Set)
基本概念
基本特性
基本操作
集合运算
成员测试
高级操作
集合推导式
总结
集合(Set)
Python集合(Set)是Python语言中一个非常实用且强大的数据结构,它用于存储多个不重复的元素。集合中的元素可以是任何不可变类型的数据,如整数、浮点数、字符串等,但不能是可变数据类型,如列表或字典。集合提供了一种高效执行集合操作(如并集、交集、差集)的方式,这对于数据处理和分析任务尤为有用。
基本概念
在Python中,集合用set关键字来创建,可以通过花括号{}直接定义,或者使用内置函数set()将其他可迭代对象转换为集合。集合中的元素自动去重,这意味着每个元素在集合中只会出现一次。
# 直接定义集合
>>> my_set = {1, 2, 3, 4}
>>> print(my_set)
{1, 2, 3, 4}# 使用set()函数转换列表为集合
>>> my_list = [1, 2, 2, 3, 4]
>>> my_set_from_list = set(my_list)
>>> print(my_set_from_list)
{1, 2, 3, 4}
注意:空集合只能用set()创建,因为{}代表的是空字典。
>>> type({})
<class 'dict'>
>>> type(set())
<class 'set'>
基本特性
在数学中,集合是由不同元素组成的一个整体,这些元素是无序的,且不重复。Python 的集合类型(set)正是基于这一概念实现的。与列表(list)、元组(tuple)等其他数据结构相比,集合有以下几个显著特性:
- 无序性:集合中的元素没有固定的顺序。
- 元素唯一性:集合中的所有元素都是唯一的,不会有重复的元素。
- 可变:集合是可变的,可以添加或删除元素。
- 动态性:集合的大小可以根据需要动态变化。
基本操作
add(element):向集合中添加一个元素。remove(element):从集合中移除指定元素,如果元素不存在则抛出KeyError异常。discard(element):与remove相似,但当元素不存在时不会抛出错误。pop():随机移除并返回集合中的一个元素,集合为空时会抛出KeyError。clear():移除集合中所有元素,使其成为空集。copy():集合的复制拷贝。
>>> a = {1,2,3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}
>>> a.remove(4)
Traceback (most recent call last):File "<pyshell#11>", line 1, in <module>a.remove(4)
KeyError: 4
>>> a.discard(4)
>>> a.discard(3)
>>> a
{1, 2}
>>> a.pop()
1
>>> a
{2}
>>> a.clear()
>>> a
set()
>>> t = {2,3,4}
>>> t
{2, 3, 4}
>>> s = t.copy()
>>> s
{2, 3, 4}
集合运算
union(other_set):返回两个集合的并集。intersection(other_set):返回两个集合的交集。difference(other_set):返回两个集合的差集。symmetric_difference(other_set):返回两个集合中不重复的元素集合,也称对称差集。
集合运算也能使用运算符操作,以上四种运算分别对应重载运算符: | 、 &、 -、 ^。
>>> s = {1,2,3}
>>> t = {2,3,4}
>>> s.union(t)
{1, 2, 3, 4}
>>> s | t
{1, 2, 3, 4}
>>> s.intersection(t)
{2, 3}
>>> s & t
{2, 3}
>>> s.difference(t)
{1}
>>> s - t
{1}
>>> s.symmetric_difference(t)
{1, 4}
>>> s ^ t
{1, 4}
另外对应四个update函数,功能对应相同,但改变当前集合。
update(other_set):返回两个集合的并集。intersection_update(other_set):返回两个集合的交集。difference_update(other_set):返回两个集合的差集。symmetric_difference_update(other_set):返回两个集合中不重复的元素集合,也称对称差集。
>>> s = {1,2,3}
>>> t = {2,3,4}
>>> s.update(t)
>>> s
{1, 2, 3, 4}
>>> t
{2, 3, 4}
>>> s = {1,2,3}
>>> s.intersection_update(t)
>>> s
{2, 3}
>>> s = {1,2,3}
>>> s.difference_update(t)
>>> s
{1}
>>> s = {1,2,3}
>>> s.symmetric_difference_update(t)
>>> s
{1, 4}
注:改变的是原集合的值,四个函数的返回值都是None。
成员测试
in和not in:检查元素是否属于集合。
>>> s = {1,2,3}
>>> 1 in s
True
>>> 4 in s
False
>>> 1 not in s
False
>>> 4 not in s
True
高级操作
- 子集与超集:可以使用
issubset()和issuperset()方法来判断一个集合是否是另一个集合的子集或超集(父集)。 - isdisjoint():判断当前集合与另一个集合,是否交集为空。
- 幂集:幂集是指一个集合所有可能子集的集合,可以通过递归或迭代的方式生成。
- 笛卡尔积:两个集合的笛卡尔积可以通过
itertools.product()函数实现。
注:比较运算符==、 >、 >=、 < 、<= 也被重载用于父集、子集的比较。
注:笛卡尔积的概念
假设有两个集合 A = {a1, a2, ..., an} 和 B = {b1, b2, ..., bm},它们的笛卡尔积是所有可能的有序对 (ai, bj) 的集合,记作 A×B。
>>> import itertools
>>> s = {1,2,3}
>>> t = {2,3,4}
>>> list(itertools.product(s,t))
[(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4)]
集合推导式
类似于列表推导式,集合也可以通过集合推导式快速生成。集合推导式语法简洁,适用于根据已有集合或其他可迭代对象生成新集合。
>>> squares = {x**2 for x in range(10)}
>>> print(squares)
{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
总结
Python集合是一种无序、不重复元素的集合数据类型,它提供了丰富的操作方法,包括元素的添加、删除、集合运算等。集合在数据处理、算法设计等方面具有广泛的应用,特别是对于需要去重、集合运算的场景,集合的效率和简洁性使其成为首选工具。通过掌握集合的基本操作和高级特性,开发者可以更加灵活高效地处理数据,提升代码的性能和可读性。随着Python在数据分析、机器学习、Web开发等领域的广泛应用,深入理解并有效利用集合功能,已成为Python程序员的一项重要技能。
相关文章:
Python集合的基本概念和使用方法
目录 集合(Set) 基本概念 基本特性 基本操作 集合运算 成员测试 高级操作 集合推导式 总结 集合(Set) Python集合(Set)是Python语言中一个非常实用且强大的数据结构,它用于存储多个不…...
谷歌浏览器124版本Webdriver驱动下载
查看谷歌浏览器版本 在浏览器的地址栏输入: chrome://version/回车后即可查看到对应版本(不要点击帮助-关于Google chrome,因为点击后会自动更新谷歌版本) 114之前版本:下载链接 123以后版本:下载链接࿰…...
十大排序
本文将以「 通俗易懂」的方式来描述排序的基本实现。 🧑💻阅读本文前,需要一点点编程基础和一点点数据结构知识 本文的所有代码以cpp实现 文章目录 排序的定义 插入排序 ⭐ 🧐算法描述 💖具体实现 …...
微信小程序学习笔记(1)
文章目录 一、文件作用app.json:project.config.json:sitemap.json页面中.json 二、项目首页三、语法**WXML**和**HTML**WXSS 和CSS的区别小程序中.js文件的分类 一、文件作用 app.json: 当前小程序的全局配置,包括所有页面路径、窗口外观、…...
OpenGauss数据库-6.表空间管理
第1关:创建表空间 gsql -d postgres -U gaussdb -W passwd123123 CREATE TABLESPACE fastspace OWNER omm relative location tablespace/tablespace_1; 第2关:修改表空间 gsql -d postgres -U gaussdb -W passwd123123 ALTER TABLESPACE fastspace R…...
相约乌镇 续写网络空间命运与共的新篇章(二)
从乌镇峰会升级为世界互联网大会,既是展示互联网发展成果的技术盛会,也是尖端科技综合运用的宏大场景。从枕水江南散发出的“互联网之光”,到前沿技术的创新突破和场景应用,澎湃的是数字经济浪潮,激荡的是科技创新能量…...
【全网最简单的解决办法】vscode中点击运行出现仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用
首先确保你是否下载好了gcc编译器!!! 检测方法: winR 打开cmd命令窗 输入where gcc(如果出现路径则说明gcc配置好啦!) where gcc 然后打开我们的vscode 把这个文件删除掉 再次点击运行代码,第一个出现…...
NFS共享存储服务
NFS共享存储服务 NFS:network file system ,在计算机网络中共享文件系统的协议。 计算机之间可以通过网络共享目录和文件,分为两个部分: 1、rpcbind:远程共享调用 2、nfs:共享服务,端口号:2…...
Docker面试整理-Docker 常用命令
Docker 提供了一套丰富的命令行工具,使得用户能够管理容器、镜像、网络和卷等资源。这里列出了一些常用的 Docker 命令: 镜像相关命令:docker pull [OPTIONS] NAME[:TAG|@DIGEST]: 从仓库拉取一个镜像或仓库。docker push NAME[:TAG]: 推送一个镜像或仓库到远程仓库。docker …...
Cinema 4D 2024 软件安装教程、附安装包下载
Cinema 4D 2024 Cinema 4D(C4D)是一款由Maxon开发的三维建模、动画和渲染软件,广泛用于电影制作、广告、游戏开发、视觉效果等领域。Cinema 4D允许用户创建复杂的三维模型,包括角色、场景、物体等。它提供了多种建模工具&#x…...
2024全国高考作文题解读(Chat GPT 4.0版本)
新课标I卷 阅读下面的材料,根据要求写作。(60分) 随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少? 以上材料引发了你怎样的联想和思考?请写…...
欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?
在当今全球化的浪潮中,中国品牌正积极拓展海外市场,寻求更广阔的发展空间。面对国际竞争,有效的海外媒体发稿营销策略对于品牌国际化至关重要。以下是一些关键点和建议,以帮助品牌在海外市场取得成功。 深入了解目标市场…...
Rust-10-数据类型
Rust 标准库中包含一系列被称为 集合(collections)的非常有用的数据结构。大部分其他数据类型都代表一个特定的值,不过集合可以包含多个值。不同于内建的数组和元组类型,这些集合指向的数据是储存在堆上的,这意味着数据…...
C#面:PDB是什么东西? 在调试中它应该放在哪里
C# PDB(Program Database)是一种用于存储调试信息的文件格式。它包含了源代码文件、符号表和其他调试相关的信息,可以帮助开发人员在调试过程中定位和解决问题 在调试中,PDB文件应该与编译生成的可执行文件(如DLL或EX…...
C#--使用CMake构建C++程序调用示例
1.C代码 // example.cpp#include <iostream>extern "C" {__declspec(dllexport) void PrintMessage() {std::cout << "Hello from C!" << std::endl;} }2.CMakeLists.txt文件,用于使用CMake构建C库: # CMakeLis…...
三十七篇:大数据架构革命:Lambda与Kappa的深度剖析
大数据架构革命:Lambda与Kappa的深度剖析 1. 引言 在这个数据驱动的时代,我们面临着前所未有的挑战和机遇。随着数据量的爆炸性增长,传统的数据处理方法已无法满足现代业务的需求。大数据处理不仅涉及数据量的增加,还包括数据类型的多样化、数据来源的广泛性以及对实时数据…...
Vue3【十五】标签的Ref属性
Vue3【十五】标签的Ref属性 标签的ref属性 用于注册模板引用 用在dom标签上,获取的是dom节点 用在组件上,获取的是组件实例对象 案例截图 目录结构 代码 app.vue <template><div class"app"><h1 ref"title2">你…...
Java实现数据结构——顺序表
目录 一、前言 二、实现 2.1 增 2.2 删 2.3 查 2.4 改 2.5 销毁顺序表 三、Arraylist 3.1 构造方法 3.2 常用操作 3.3 ArrayList遍历 四、 ArrayList具体使用 4.1 杨辉三角 4.2 简单洗牌算法 一、前言 笔者在以前的文章中实现过顺序表 本文在理论上不会有太详细…...
线程知识点总结
Java线程是Java并发编程中的核心概念之一,它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结: 1. 线程的创建与启动 继承Thread类:创建一个新的类继承Thread类,并重写其run()方法。通过创建该类的实例并调用st…...
计算机网络:数据链路层 - 扩展的以太网
计算机网络:数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细铜轴电缆。 后来,以太网发展出来了一种使用大规模…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
