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

Python集合

一、Python集合概述

Python集合(set)是一种无序、可变且不包含重复元素的数据结构。集合在Python中通过哈希表实现,这使得它在成员检测和去重操作中具有极高的效率。

集合与列表、元组的主要区别:

无序性:元素没有固定顺序

唯一性:自动去除重复项

可变性:可以动态添加删除元素

元素限制:只能包含可哈希(不可变)类型
在这里插入图片描述

二、集合的创建与初始化

1. 基本创建方法

使用花括号创建

colors = {'red', 'green', 'blue'}

使用set()构造函数创建

numbers = set([1, 2, 3, 4, 5])

空集合必须使用set()创建

empty_set = set()  # 正确
not_empty_set = {}  # 错误,这会创建字典
  1. 特殊创建方式

从字符串创建字符集合

char_set = set('hello')  # {'h', 'e', 'l', 'o'}

使用生成器表达式创建

squares = set(x*x for x in range(10))

从字典键创建集合

dict_keys = {'a':1, 'b':2}
key_set = set(dict_keys)  # {'a', 'b'}

三、集合操作详解

1. 基本操作

添加元素

s = {1, 2, 3}
s.add(4)          # {1, 2, 3, 4}
s.update([5,6])   # {1, 2, 3, 4, 5, 6}

删除元素

s.remove(3)       # {1, 2, 4, 5, 6} 元素不存在会报错
s.discard(10)     # 安全删除,元素不存在不会报错
popped = s.pop()  # 随机移除并返回一个元素
s.clear()         # 清空集合
2. 集合运算
python
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

基本运算

print(A | B)  # 并集: {1, 2, 3, 4, 5, 6}
print(A & B)  # 交集: {3, 4}
print(A - B)  # 差集(A有B没有): {1, 2}
print(B - A)  # 差集(B有A没有): {5, 6}
print(A ^ B)  # 对称差集(只在A或只在B): {1, 2, 5, 6}

在这里插入图片描述

比较运算

print(A <= B)  # 子集判断
print(A < B)   # 真子集判断
print(A >= B)  # 超集判断
print(A > B)   # 真超集判断
print(A.isdisjoint(B))  # 是否无交集

四、集合的高级应用

1. 数据去重

列表去重

duplicates = [1, 2, 2, 3, 4, 4, 4]
unique = list(set(duplicates))  # [1, 2, 3, 4]

保持原始顺序的去重

from collections import OrderedDict
unique_ordered = list(OrderedDict.fromkeys(duplicates))

2. 大型数据查找

创建100万个元素的集合和列表

large_set = set(range(1_000_000))
large_list = list(range(1_000_000))

性能对比

%timeit 999_999 in large_set   # 约0.0001秒
%timeit 999_999 in large_list  # 约0.01秒

3. 集合推导式

基本集合推导式

squares = {x**2 for x in range(10)}

带条件的集合推导式

even_squares = {x**2 for x in range(10) if x%2 == 0}

多数据源推导式

combined = {(x,y) for x in [1,2,3] for y in ['a','b']}

五、冻结集合(frozenset)

冻结集合是不可变版本的集合,具有以下特点:

不可添加或删除元素

可哈希,可用作字典键

可作为其他集合的元素

fs = frozenset([1, 2, 3])
d = {fs: "example"}  # 有效

冻结集合运算

fs1 = frozenset([1,2,3])
fs2 = frozenset([3,4,5])
union = fs1 | fs2  # frozenset({1, 2, 3, 4, 5})

六、总结与思考

学习Python集合这一周以来,我最初只是把它当作一种简单的去重工具,但随着深入使用,发现它远比我想象的要强大得多。记得第一次用集合给列表去重时,那种一行代码解决问题的快感,让我立刻喜欢上了这个数据结构。

在实际项目中,集合真正展现了它的价值。上周处理用户数据时,我需要找出两个百万级用户列表的重合部分。如果使用列表嵌套循环,估计程序要跑好几分钟。而改用集合的交集运算后,不到一秒就出了结果。这种效率上的巨大提升,让我深刻理解了选择合适数据结构的重要性。

集合的无序特性曾经让我有些困扰。有次我试图用集合存储需要按顺序处理的数据,结果自然遇到了问题。这个教训让我明白,每种数据结构都有其适用场景,不能强行套用。就像螺丝刀不能当锤子用一样,集合最适合的是那些不关心顺序,但需要快速查找和去重的场合。

最让我惊喜的是集合运算的简洁表达。以前需要写十几行循环代码才能实现的共同好友查找功能,现在用简单的交集运算符"&"就能完成。这种表达上的简洁性,不仅减少了代码量,更让程序逻辑变得一目了然。

不过集合也不是万能的。记得有一次我试图把字典存入集合,结果遇到了类型错误。这才知道集合元素必须是可哈希的,像列表、字典这样的可变类型不行。这类小陷阱提醒我,在享受集合便利的同时,也要清楚它的限制。

现在写代码时,我会习惯性思考:"这里用集合会不会更合适?"这种思维转变,让我的代码效率提升了不少。特别是在处理标签系统、权限校验这类需要频繁检查元素是否存在的场景,集合的表现总是令人满意。

总的来说,Python集合就像是一个被很多人低估的工具。它看似简单,但用好了能解决很多实际问题。学习数据结构的意义,不仅在于记住它们的API,更要理解每种结构背后的设计思想,知道在什么场景下该用什么工具。集合的教学让我明白,编程中的优雅往往来自于对基础知识的深刻理解和灵活运用。

相关文章:

Python集合

一、Python集合概述 Python集合(set)是一种无序、可变且不包含重复元素的数据结构。集合在Python中通过哈希表实现&#xff0c;这使得它在成员检测和去重操作中具有极高的效率。 集合与列表、元组的主要区别&#xff1a; 无序性&#xff1a;元素没有固定顺序 唯一性&#x…...

容器化-K8s-镜像仓库使用和应用

一、K8s 镜像仓库使用 1、启动镜像仓库 cd/usr/local/harbor ./install.sh2、配置镜像仓库地址 在 master 节点和 slaver 节点上,需要配置 Docker 的镜像仓库地址,以便能够访问本地的镜像仓库。编辑 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在则创建),添…...

解决报错 Flask-SQLAlchemy TypeError: ‘float‘ object is not callable

Flask-SQLAlchemy TypeError: ‘float’ object is not callable Flask-SQLAlchemy 与 Python 版本兼容性问题解决方案 日期&#xff1a;2025 年 5 月 19 日 分类&#xff1a;后端开发、Python、Flask 标签&#xff1a;Flask-SQLAlchemy, Python 版本兼容&#xff0c;错误修复…...

k8s节点维护的细节

k8s节点维护的细节 Kubernetes&#xff08;k8s&#xff09;节点维护是保障集群稳定运行的重要工作&#xff0c;涉及节点升级、故障排查、资源优化等多个方面。维护步骤和操作命令&#xff1a; 一、节点维护前的准备工作 1. 查看集群状态 kubectl get nodes # 查看所有节点状…...

基于STM32的光照测量报警Proteus仿真设计+程序设计+设计报告+讲解视频

基于STM32的光照测量报警仿真设计 1.**主要功能****2.仿真设计****3.程序设计****4.设计报告****5.下载链接** 基于STM32的光照测量报警仿真设计 (Proteus仿真程序设计设计报告讲解视频&#xff09; 仿真图Proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语…...

Docker 运维管理

Docker 运维管理 一、Swarm集群管理1.1 Swarm的核心概念1.1.1 集群1.1.2 节点1.1.3 服务和任务1.1.4 负载均衡 1.2 Swarm安装准备工作创建集群添加工作节点到集群发布服务到集群扩展一个或多个服务从集群中删除服务ssh免密登录 二、Docker Compose与 Swarm 一起使用 Compose 三…...

五分钟本地部署大模型

前提&#xff1a;个人PC机&#xff0c;配置&#xff1a;CPU:i5-13600KF 显卡&#xff1a;RTX3080 内存&#xff1a;32GB 1.安装ollama 访问https://ollama.com/&#xff0c;点击下载&#xff0c;完成后傻瓜式安装即可&#xff1b; 2.修改环境变量 默认大模型下载在C盘&…...

RSA(公钥加密算法)

RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种常见的公钥加密算法&#xff0c;广泛应用于安全通信中。它是由三位计算机科学家Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出的&#xff0c;是一种基于数论问题的加密算法。 一、RSA的基本原理 RSA是基于大数…...

Go语言测试用例的执行与分析

在软件开发过程中&#xff0c;测试用例是确保代码质量的关键环节。Go语言作为一种现代的编程语言&#xff0c;它内置了强大的测试框架&#xff0c;可以帮助开发者轻松编写和执行测试用例。本文将介绍如何在 Go 语言中编写、执行测试用例&#xff0c;并对测试结果进行分析。 ## …...

动态规划-LCR 089.打家劫舍-力扣(LeetCode)

一、题目解析 结合示例1&#xff0c;我们能得知对于小偷而言不能连续偷相连的房间&#xff0c;且需要保证偷窃的金额最高。 二、算法解析 1.状态表示 我们想知道到最后一个房子时所偷窃的最高金额&#xff0c;所以dp[i]表示在i位置时&#xff0c;所偷到的最大价值。 但我们…...

leetcode hot100:解题思路大全

因为某大厂的算法没有撕出来&#xff0c;怒而整理该贴。只有少数题目有AC代码&#xff0c;大部分只会有思路或者伪代码。 技巧 只出现一次的数字 题目 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出…...

2022年下半年信息系统项目管理师——综合知识真题及答案(4)

2022年下半年信息系统项目管理师 ——综合知识真题及答案&#xff08;4&#xff09; 零、时光宝盒 &#xff08;https://blog.csdn.net/weixin_69553582 逆境清醒&#xff09; 双向奔赴的善意 网上看到的视频。 家里开包子店的男孩冒雨放学&#xff0c;路口的交警叔叔担心孩…...

大语言模型(LLM)本身是无状态的,怎么固化记忆

大语言模型(LLM)本身是无状态的,无法直接“记住”历史对话或用户特定信息 大语言模型(LLM)本身是无状态的,无法直接“记住”历史对话或用户特定信息,但可以通过架构改进、外部记忆整合、训练方法优化等方案实现上下文记忆能力。 一、模型内部记忆增强:让LLM“记住”…...

ISO 26262-5 硬件详细设计

7 Hardware detailed design 硬件详细设计个人理解包含各种理论计算和分析 为了避免常见的设计缺陷&#xff0c; 应运用相关的经验总结。 在硬件详细设计时&#xff0c; 应考虑安全相关硬件元器件失效的非功能性原因&#xff0c; 如果适用&#xff0c; 可包括以下的影响因素&…...

C# NX二次开发-求体、面的最小包容圆柱

NX自带ufun函数里有求体、面的最小包容方块。(UF_MODL_ask_bounding_box、UF_MODL_ask_bounding_box_aligned、UF_MODL_ask_bounding_box_aligned),但没有求最小包容圆柱。但有很多时候需要求最小包容圆柱。比如零件开圆棒料。这时需要通过一些方法来计算出最小包容圆柱。 …...

vue2.0 组件之间的数据共享

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…...

11.4/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Global, regional, and national burden of neglected tropical diseases and malaria in the general population, 1990-2021: Systematic analysis of the global burden of disease study 2021 DOI&#xff1a;10.1016/j.jare.2025.04.004 中文标题&…...

【愚公系列】《Manus极简入门》048-自然探险之旅:“户外活动规划师”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

生命科学温控物流:现状、驱动因素与发展趋势深度洞察

在生命科学产业蓬勃发展的当下&#xff0c;生命科学温控物流作为保障药品、疫苗等温度敏感产品安全运输的关键环节&#xff0c;正受到越来越多的关注。根据QYResearch报告出版商调研统计&#xff0c;2031年全球生命科学温控物流市场销售额预计将达到3563.3亿元&#xff0c;年复…...

2025-2030年制造业数字化转型发展趋势展望

随着科技的飞速发展&#xff0c;数字化转型已成为制造业提升竞争力、实现高质量发展的核心路径。从2025年到2030年&#xff0c;这一趋势将进一步深化&#xff0c;新技术、新模式和新生态将为制造业注入强劲动力。作为小编&#xff0c;今天带大家一起来看看未来五年制造业数字化…...

OSD原理以及模块的讲解

一.原理讲解 1.OSD的概念&#xff1a; OSD(on-screen-display)中文名称是屏幕菜单调节显示方式&#xff0c;它的作用是对屏幕显示器做各种工作指标&#xff0c;包括&#xff1a;色彩、几何图形等进行调整&#xff0c;从而使得整个显示器得到最佳的状。 最常见的OSD调试就是在…...

SQL注入——Sqlmap工具使用

一、Sqlmap介绍 Sqlmap 是一个使用python语言开发的开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用 SQL 注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎&#xff0c;针对各种不同类型数据库的渗透测试的功能选项&#xff0c;…...

如何有效提高海外社媒矩阵曝光率,避免封号风险?

在全球社交媒体营销的过程中&#xff0c;海外矩阵社媒的运营已经成为一个不可或缺的策略。通过建立多个社媒账号&#xff0c;可以有效地扩展市场覆盖、提高品牌曝光率&#xff0c;但与此同时&#xff0c;账号之间的关联问题也需要引起足够重视。过度的关联可能导致社媒平台对账…...

B树与B+树全面解析

B树与B树全面解析 前言一、B 树的基本概念与结构特性1.1 B 树的定义1.2 B 树的结构特性1.3 B 树的节点结构示例 二、B 树的基本操作2.1 查找操作2.2 插入操作2.3 删除操作 三、B 树的基本概念与结构特性3.1 B 树的定义3.2 B 树的结构特性3.3 B 树的节点结构示例 四、B 树与…...

代码随想录60期day41

完全背包 #include<iostream> #include<vector>int main() {int n,bagWeight;int w,v;cin>>n>>bagWeight;vector<int>weight(n);vector<int>value(n);for(int i 0;i <n;i){cin>>weight[i]>>value[i];}vector<vecotr&l…...

语言幻觉测试用例及相关策略总结

文章目录 语言幻觉测试用例及相关策略总结如何判断内容是否存在语言幻觉&#xff1f; 一、语言幻觉测试用例类型1.1 事实性错误测试用例 1&#xff1a;时效性强的事实用例 2&#xff1a;跨领域常识用例 3&#xff1a;动态变化的规则 **1.2 逻辑矛盾测试**用例 1&#xff1a;同一…...

云原生攻防1(基础介绍)

什么是云原生 云原生是一套技术体系和方法论。 云:表示应用程序位于云中 原生:表示应用程序从设计之初就考虑到云的环境,原生为云而设计,在云上以最佳状态运行。 CNCF(Cloud Native Compute Foundation) 是 Linux 基金会旗下的一个组织,主要作用是在推动以容器为中心的…...

云原生环境下的事件驱动架构:理念、优势与落地实践

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从服务调用到事件流动的转变 随着云原生技术的兴起,软件架构正经历一场深刻变革。传统以请求响应为主的服务通信方式,在高度动态、分布式的云原生环境下暴露出诸多挑战:强同步耦合、高延迟链路…...

InternLM 论文分类微调实践(XTuner 版)

1.环境安装 我创建开发机选择镜像为Cuda12.2-conda&#xff0c;选择GPU为100%A100的资源配置 Conda 管理环境 conda create -n xtuner_101 python3.10 -y conda activate xtuner_101 pip install torch2.4.0cu121 torchvision torchaudio --extra-index-url https://downloa…...

kotlin Flow的技术范畴

Flow 是 Kotlin 中的技术&#xff0c;准确地说&#xff0c;它是 Kotlin 协程&#xff08;Kotlin Coroutines&#xff09;库的一部分&#xff0c;属于 Kotlin 的 异步编程范畴。 ✅ Flow 的归属与背景&#xff1a; 所属技术&#xff1a;Kotlin&#xff08;由 JetBrains 开发&am…...

PyTorch图像建模(图像识别、分割和分类案例)

文章目录 图像分类技术&#xff1a;改变生活的智能之眼图形识别技术图像识别过程图像预处理图像特征提取 图像分割技术练习案例&#xff1a;图像分类项目源码地址实现代码&#xff08;简化版&#xff09;训练结果&#xff08;简化版&#xff09;实现代码&#xff08;优化版&…...

系统安全应用

文章目录 一.账号安全控制1.基本安全措施①系统账号清理②密码安全控制 2.用户切换与提权①su命令用法②PAM认证 3.sudo命令-提升执行权限①在配置文件/etc/sudoers中添加授权 二.系统引导和登录控制1.开关机安全控制①调整bios引导设置②限制更改grub引导参数 三.弱口令检测.端…...

day53—二分法—搜索旋转排序数组(LeetCode-81)

题目描述 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1], ..., nu…...

力扣面试150题--从前序与中序遍历序列构造二叉树

Day 43 题目描述 思路&#xff08;这题第一次没做出来&#xff0c;看了题解后理解&#xff09; 做法&#xff1a;哈希表递归 首先复习一下前序遍历和中序遍历&#xff0c; 前序遍历&#xff1a;中左右&#xff0c;这个不仅是遍历树的路线&#xff0c;同时对一个对于一个前序遍…...

win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹

在尝试删除路径为.../bak/sql的文件时&#xff0c;系统提示无权限操作。然而&#xff0c;关闭SQLyog后&#xff0c;删除操作成功完成。这表明SQLyog可能正在占用该文件&#xff0c;导致删除权限受限。关闭SQLyog后&#xff0c;文件被释放&#xff0c;删除操作得以顺利进行。建议…...

卷java、基础2

内部类 了解 1. 成员内部类&#xff08;了解&#xff09; 2. 静态内部类&#xff08;了解&#xff09; 实例化的写法 局部内部类&#xff08;看看就好&#xff09; 局部内部类是定义在在方法中、代码块中、构造器等执行体中。 匿名内部类&#xff08;重要&#xff09; 1.先…...

从 “龟速” 到流畅,英国 - 中国 SD-WAN 专线让分公司直连总部系统

对于在英国设立总部、国内开设分公司的企业而言&#xff0c;分公司访问总部内网系统常面临网络延迟高、连接不稳定等问题。传统网络方案难以满足跨国数据传输需求&#xff0c;而英国 - 中国 SD-WAN 国际组网专线凭借创新技术&#xff0c;为企业搭建起高效稳定的网络桥梁。 SD-W…...

C++--综合应用-演讲比赛项目

需求 分析 1、初始化&#xff0c;生成演讲学生数组&#xff0c;打乱数组以便随机分组 2、每轮比赛后需要统计每个学生的胜场&#xff0c;以便决定进入下一轮和最终胜利的学生 代码实现 #pragma once#include<iostream> #include<string> #include<algorithm…...

简单实现网页加载进度条

一、监听静态资源加载情况 可以通过window.performance 对象来监听⻚⾯资源加载进度。该对象提供了各种⽅法来获取资源加载的详细信息。 可以使⽤performance.getEntries() ⽅法获取⻚⾯上所有的资源加载信息。可以使⽤该⽅法来监测每个资源的加载状态&#xff0c;计算加载时间…...

C语言——深入理解指针(一)

C语言——指针&#xff08;一&#xff09; 进入指针后&#xff0c;C语言就有了一定的难度&#xff0c;我们需要认真理解 指针&#xff08;一&#xff09; 1 .内存和地址 内存&#xff1a;程序运行起来后&#xff0c;要加载到内存中&#xff0c;数据的存储也是在内存中。 我…...

计算机组织原理第一章

1、 2、 3、 4、 5、 从源程序到可执行文件&#xff1a; 6、 7、 8、 8、...

upload-labs通关笔记-第12关 文件上传之白名单GET法

目录 一、白名单过滤 二、%00截断 1、%00截断原理 2、空字符 3、截断条件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置为Off &#xff08;3&#xff09;代码逻辑存在缺陷 三、源码分析 1、代码审计 &#xff08;1&…...

网络学习-epoll(四)

一、为什么使用epoll&#xff1f; 1、poll实质是对select的优化&#xff0c;解决了其参数限制的问题&#xff0c;但是其本质还是一个轮询机制。 2、poll是系统调用&#xff0c;当客户端连接数量较多时&#xff0c;会将大量的pollfd从用户态拷贝到内核态&#xff0c;开销较大。…...

uWSGI、IIS、Tomcat有啥区别?

uWSGI、IIS 和 Tomcat对比 以下是 uWSGI、IIS 和 Tomcat 的对比分析&#xff0c;包括它们的核心特性、适用场景和典型用例&#xff1a; 1. uWSGI 核心特性 • 定位&#xff1a;专为 Python 应用设计的应用服务器&#xff08;支持 WSGI/ASGI 协议&#xff09;。 • 协议支持&a…...

AI本地化服务的战略机遇与发展路径

一、市场机遇&#xff1a;线下商业的AI赋能真空 1. 需求侧痛点明确 实体商家面临线上平台25%-30%的高额抽成挤压利润&#xff0c;传统地推转化率不足5%&#xff0c;而AI驱动的精准营销可将获客成本降低60%以上。区域性服务商凭借对本地消费习惯的深度理解&#xff0c;能构建更精…...

游戏盾的功有哪些?

游戏盾的功能主要包括以下几方面&#xff1a; 一、网络攻击防护 DDoS攻击防护&#xff1a; T级防御能力&#xff1a;游戏盾提供分布式云节点防御集群&#xff0c;可跨地区、跨机房动态扩展防御能力和负载容量&#xff0c;轻松达到T级别防御&#xff0c;有效抵御SYN Flood、UD…...

C++开源库argh使用教程

概述 argh 是一个轻量级的 C 命令行参数解析库&#xff0c;只需要包含一个头文件即可使用。 github页面&#xff1a; https://github.com/adishavit/argh 基本用法 #include "argh.h" 创建argh::parser对象 使用parse方法解析命令行 argh::parser重载了括号运…...

万用表如何区分零线、火线、地线

普通验电笔只能区分火线&#xff0c;零线和地线是区分不出来的&#xff0c;那么&#xff0c;我们就需要使用万用表来进行区分&#xff01;轻松搞定&#xff01; 万用表操作步骤&#xff1a; 1、黑表笔插Com,红表笔接电压和电阻档&#xff0c;万用表打到交流电压750V档。 2、黑表…...

java配置webSocket、前端使用uniapp连接

一、这个管理系统是基于若依框架&#xff0c;配置webSocKet的maven依赖 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 二、配…...

01、java方法

前面与c都很相似&#xff0c;于是我决定从这一章开始复盘java的学习 一、方法 方法的好处主要体现在使用方便&#xff0c;可以在多处调用&#xff0c;不必反复造轮子 1、方法的使用 这就是一个简单的方法创建&#xff1a; public class java0517 {public static int ret(int …...