Python编程实战 · 基础入门篇 | 集合(set)

作者:程序员爱钓鱼日期:2025/11/6

在 Python 的基础数据结构中,除了列表(list)、元组(tuple)、字典(dict),还有一种特殊但非常实用的数据类型——集合(set)。 集合的最大特点是:不重复、无序、可进行集合运算。 它常用于去重、数据筛选、关系判断等场景,是数据处理中的高效利器。


一 什么是集合(set)

集合(Set)是一种 无序、可变 的数据容器, 用于存放 不重复的元素

在 Python 中,可以通过 {}set() 创建集合。

1fruits = {"apple", "banana", "cherry"}
2print(fruits)   # {'banana', 'cherry', 'apple'}
3

集合中的元素是 唯一的,如果你放入重复项,Python 会自动去重。

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

二 创建集合的几种方式

1. 使用花括号 {}

1colors = {"red", "green", "blue"}
2

2. 使用 set() 函数

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

3. 创建空集合

⚠ 注意:创建空集合必须用 set(), 因为 {} 默认是一个空字典。

1empty_set = set()
2print(type(empty_set))  # <class 'set'>
3

三 集合的常见操作

1. 添加元素

1s = {1, 2, 3}
2s.add(4)
3print(s)  # {1, 2, 3, 4}
4

2. 更新(合并)多个元素

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

3. 删除元素

1s.remove(3)      # 删除指定元素,不存在时报错
2s.discard(10)    # 删除指定元素,不存在也不报错
3s.pop()          # 随机删除一个元素
4s.clear()        # 清空集合
5

四 集合的运算(重点)

集合支持多种数学意义上的集合运算,非常直观。

假设我们有以下两个集合:

1A = {1, 2, 3, 4}
2B = {3, 4, 5, 6}
3
运算符号示例结果
并集```AB`{1, 2, 3, 4, 5, 6}
交集&A & B{3, 4}
差集-A - B{1, 2}
对称差集^A ^ B{1, 2, 5, 6}

示例代码:

1print(A | B)  # 并集
2print(A & B)  # 交集
3print(A - B)  # 差集
4print(A ^ B)  # 对称差集
5

五 集合的关系运算

集合之间可以比较包含关系:

1A = {1, 2, 3}
2B = {1, 2, 3, 4, 5}
3
4print(A < B)   # True,A 是 B 的子集
5print(B > A)   # True,B 是 A 的超集
6print(A == B)  # False
7print(A != B)  # True
8

六 集合推导式

Python 同样支持 集合推导式(set comprehension), 可以快速生成集合。

1squares = {x**2 for x in range(1, 6)}
2print(squares)  # {1, 4, 9, 16, 25}
3

还可以加条件过滤:

1even_squares = {x**2 for x in range(1, 11) if x % 2 == 0}
2print(even_squares)  # {4, 16, 36, 64, 100}
3

七 集合的去重功能

集合最常见的用途之一就是 去重

1numbers = [1, 2, 2, 3, 3, 4]
2unique_numbers = list(set(numbers))
3print(unique_numbers)  # [1, 2, 3, 4]
4

⚠ 注意:集合是无序的,因此去重后的顺序可能与原列表不同。


八 集合的遍历

集合是可迭代的,可以直接用 for 遍历:

1fruits = {"apple", "banana", "cherry"}
2for fruit in fruits:
3    print(fruit)
4

由于集合无序,输出顺序可能每次都不一样。


九 集合的不可变版本:frozenset

在某些场景中,我们希望集合也能作为字典的键或放入另一个集合中。 这时可以使用 不可变集合(frozenset)

1A = frozenset([1, 2, 3])
2B = frozenset([3, 4, 5])
3
4print(A | B)  # {1, 2, 3, 4, 5}
5

frozenset 支持所有集合运算,但不支持修改(add、remove 等)。


十 实战案例:网站用户分析

假设我们要分析两个网站的访问用户重叠情况:

1site_A = {"Tom", "Lucy", "Jack", "Emma"}
2site_B = {"Lucy", "Emma", "John"}
3
4print("A站用户:", site_A)
5print("B站用户:", site_B)
6print("同时访问两站的用户:", site_A & site_B)
7print("只访问A站的用户:", site_A - site_B)
8print("所有用户:", site_A | site_B)
9

输出结果:

1同时访问两站的用户: {'Lucy', 'Emma'}
2只访问A站的用户: {'Jack', 'Tom'}
3所有用户: {'Jack', 'Lucy', 'Emma', 'Tom', 'John'}
4

十一 小结

特点说明
是否有序❌ 无序
是否可变✅ 可变(frozenset 为不可变)
是否允许重复❌ 不允许
创建方式{} 或 set()
主要功能去重、集合运算、关系判断
常用操作add()、update()、remove()、union()、intersection() 等
推导式支持集合推导式

✅ 总结

  1. 集合(set)是无序且不重复的容器。
  2. 常用于数据去重、过滤和集合关系计算。
  3. 支持数学集合的四大运算:并集、交集、差集、对称差集。
  4. 可以使用集合推导式快速生成集合。
  5. 如果需要不可变集合,可使用 frozenset


Python编程实战 · 基础入门篇 | 集合(set)》 是转载文章,点击查看原文


相关推荐


(3)100天python从入门到拿捏
硅基工坊2025/11/1

Python3 基本数据类型 Python 中的变量不需要声明,它没有类型,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建 文章目录 Python3 基本数据类型一、数据类型介绍1. 数值类型(Numeric Types)1.1 整数(int)1.2 浮点数(float)1.3 复数(complex) 2. 字符串类型(String)3. 布尔类型(Boolean)4. 列表类型(List)5. 元组类型(Tuple)6. 字典类型(Dictionary)


数据库连接详解:从基础到实践
培风图南以星河揽胜2025/10/30

数据库连接详解:从基础到实践 在现代软件开发中,数据库是存储和管理数据的核心组件。无论是Web应用、移动应用还是数据分析系统,都离不开与数据库的交互。而这一切的基础,就是数据库连接。本文将深入浅出地介绍数据库连接的基本概念、原理、实现方式以及最佳实践,帮助你构建高效、稳定的数据库访问层。 1. 什么是数据库连接? 简单来说,数据库连接(Database Connection) 是应用程序与数据库服务器之间建立的一个通信通道。通过这个通道,应用程序可以发送SQL查询、接收查询结果、执行事


【案例实战】智能出行导航助手HarmonyOS 开发全流程复盘
cooldream20092025/10/27

目录 前言1. 项目概述与目标设定1.1 项目背景1.2 技术选型与总体方案 2. 架构设计:分布式与模块化融合2.1 设计思路2.2 模块化的实践价值 3. HarmonyOS 开放能力集成实战3.1 云开发(Cloud Development)3.2 性能监控与调优(APMS)3.3 分布式软总线:多端协同核心 4. 性能优化体系建设4.1 启动优化分层策略4.2 内存与功耗控制4.3 云函数响应优化 5. 经验复盘与开发心得5.1 架构先行,分布式思维贯穿始终5.2 善用


vue.js 视频截取为 gif - 2(将截取到的gif 转换为base64 、file)
改了一个昵称2025/10/25

demo.vue <template> <div> <div> <video ref="videoRef" :src="theUrl" controls autoplay muted crossOrigin="anonymous"></video> <!-- <div class="controls"> <button :disabled="isRecording" @click="startCapture"> 开始录制


华为Java专业级科目一通过心得
想要AC的dly2025/10/22

华为Java专业级科目一通过心得 最近顺利通过了Java专业级科目一考试。在这个过程中,我积累了一些心得体会,希望分享给大家,尤其是那些正在备考的朋友。考试并不像想象中那么难,只要掌握好基础,保持练习,就能轻松应对。下面我从几个方面谈谈我的备考经验。 1. 每天坚持使用Java,保持手感 备考Java考试,最基础的就是要保持对语言的熟悉度。我建议大家每天都用一用Java,哪怕只是写一些简单的代码片段。比如,编写一个算法题、调试一段程序,或者参与开源项目。这样做能帮助你维持“手感”,避免考试


网络速度测试工具——SpeedTest使用指南
好学的Jack2025/10/21

本文还有配套的精品资源,点击获取 简介:SpeedTest是一款用于测量互联网上传下载速度、网络延迟和数据传输稳定性的工具。软件通过连接最近的服务器进行一系列网络测试,帮助用户识别网络问题和性能瓶颈。测试步骤包括初始化测试、下载速度测试、上传速度测试、ping测试、Jitter测试和丢包率测试。安装程序“SpeedTestInstall.exe”允许用户通过简单步骤设置软件,从而进行日常或周期性的网络速度检查。 1. 网络速度测试工具使用 随着互联网技术的发展,家庭和企


EtherCAT转ModbusTCP工业智能网关:开启仓储自动化通信变革的技术桥梁
捷米特研发一部2025/10/20

一、项目背景与核心痛点 某大型智能物流中心占地10万平方米,部署了超过200台自动化设备,其中包括基于Modbus TCP协议的西门子PLC、研华工控机等主站设备,以及采用EtherCAT协议的高精度编码器、智能仪表和协作机器人。由于协议不兼容,设备间通信存在诸多问题: 效率瓶颈:PLC下发分拣指令至EtherCAT机器人响应延迟达500ms,导致分拣线节拍混乱,单日吞吐量下降20%; 故障频发:编码器位置数据无法实时同步至HMI界面,设备异常需人工巡检发现,平均故障停机时间长达1.5小时


Vue3 状态管理完全指南:从响应式 API 到 Pinia
90后晨仔2025/10/19

什么是状态管理? 在 Vue 开发中,状态管理是一个核心概念。简单来说,状态就是驱动应用的数据源。每一个 Vue 组件实例都在管理自己的响应式状态,让我们从一个简单的计数器组件开始理解: <script setup> import { ref } from 'vue' // 状态 - 驱动应用的数据源 const count = ref(0) // 动作 - 修改状态的方法 function increment() { count.value++ } </script> <!-- 视图


Python快速落地的临床知识问答与检索项目(2025年9月教学配置部分)
Allen_Lyb2025/10/17

项目概述与技术选型 本项目定位为临床辅助决策支持工具,而非替代临床诊断的独立系统,旨在解决医疗行业两大核心痛点:一是医学知识更新速率加快,2025 年临床指南年均更新量较 2020 年增长 47%,传统知识管理方式难以同步;二是科室规范呈现碎片化分布,不同院区、亚专科的诊疗流程存在差异,导致知识检索效率低下。技术路线采用 RAG 知识库 + ChatFlow 多轮对话 + 工具节点对接 的三层架构,通过整合指南文献、临床路径和院内 SOP 文档,满足门诊快速问诊、病房随访问答及科室知识库精


滴滴P0级故障背后:互联网公司是如何分级处理线上事故的?
G探险者2025/10/16

大家好,我是G探险者! 像滴滴、阿里、腾讯、华为、字节等大型互联网公司都会对线上故障(事故)进行分级管理,以便快速响应、统一调度、追责复盘。 下面我给你系统性地介绍一下——常见的互联网公司故障分级标准(P0~P4),并结合滴滴、阿里等企业的实践来说明: 🚨 一、故障分级的总体目标 通过分级来 量化故障影响范围与严重程度,从而决定响应等级、通知机制、处理时限与复盘流程。 一般采用的分级体系如下:

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0