news 2026/6/4 15:32:45

从0开始转入Ai应用层,从python学起第六天

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从0开始转入Ai应用层,从python学起第六天

一、集合 (Set) 核心定义

集合是一个无序、不重复的元素序列。元素之间用逗号分隔,用{}set()函数创建。

核心特性

  • 自动去重(重复元素只保留一个)
  • 元素必须是不可变类型(不能放列表、字典)
  • 无序(不支持索引访问)
  • 可进行交集、并集、差集等集合运算

重要提醒:空集合必须用set(),因为{}是用来创建空字典的。


二、集合的创建方式

1. 直接使用{}定义(最常用)
set1={1,2,3,4}# 自动去重name={'牛奶','面包','鸡蛋','牛奶'}# 重复元素被去掉print(name)# {'苹果', '牛奶', '鸡蛋', '面包'}
2. 使用set()函数(将可迭代对象转为集合)
set2=set([4,5,6,7])# 从列表创建set3=set((4,5,6,7))# 从元组创建name=set()# 创建空集合(必须用set())
3. 推导式创建(了解即可)

类似列表推导式,根据条件快速生成集合。

4. 不可变集合 (frozenset)

用于需要“不能修改的集合”的场景(如作为字典的键):

fs=frozenset([1,2,3,4])d={fs:"这是不可变集合作为键"}
创建方式总结
方式语法适用场景
{}直接定义{1, 2, 3}手动定义少量元素
set()函数set([1,2,3])将列表/元组/字符串等转为集合
set()空集合set()创建空集合(不能用{}
推导式{x for x in ...}按规则生成集合
frozenset()frozenset([1,2])创建不可修改的集合

三、集合的基本操作(增、删、查、集合运算)

1. 增加元素
方法作用示例
add(elem)添加单个元素s.add('苹果')
update(iterable)批量添加可迭代对象中的元素s.update(['苹果','香蕉'])
first_set=set()first_set.add('苹果')# 添加单个元素first_set.update(['苹果','香蕉'])# 批量添加
2. 删除元素
方法作用元素不存在时
remove(elem)删除指定元素报错 (KeyError)
discard(elem)删除指定元素不报错(推荐)
pop()随机删除并返回一个元素集合为空时报错
clear()清空所有元素,保留空集合
name={1,2,3,4,5}name.remove(3)# 删除3,不存在会报错name.discard(10)# 删除10,不存在也不报错(更安全)name.pop()# 随机删除一个元素name.clear()# 清空集合
3. 查询元素(无索引,只能判断存在或遍历)
name={1,2,3,4,5}# 判断元素是否存在print(1inname)# Trueprint(10notinname)# True# 遍历集合(注意:无序)foriinname:print(i)# 获取集合长度print(len(name))# 5# 判断集合是否为空print(notname)# False(非空返回True,空集合返回False)
4. 集合间运算

集合最强大的功能是数学集合运算,有两种等价写法:运算符方法

运算类型运算符方法说明
并集|union()a和b的所有元素(去重)
交集&intersection()a和b都有的元素
差集-difference()a有但b没有的元素
对称差集^symmetric_difference()a和b中互不相同的元素
a={1,2,3}b={2,3,4}print(a|b)# {1, 2, 3, 4} 并集print(a&b)# {2, 3} 交集print(a-b)# {1} 差集(a有b没有)print(a^b)# {1, 4} 对称差集
5. 子集与交集判断
方法作用示例
issubset()判断是否为子集b.issubset(a)→ b是a的子集?
issuperset()判断是否为父集a.issuperset(b)→ a包含b?
isdisjoint()判断两个集合是否有交集没有交集返回True
a={1,2,3}b={1,2}print(b.issubset(a))# True(b是a的子集)print(a.isdisjoint({4,5}))# True(没有共同元素)

四、集合内置方法速查表

增删类

方法描述
add(elem)添加单个元素
update(iterable)批量添加元素
remove(elem)删除指定元素(不存在报错)
discard(elem)删除指定元素(不存在不报错)
pop()随机删除并返回一个元素
clear()清空所有元素

运算类

方法描述对应运算符
union()返回并集|
intersection()返回交集&
difference()返回差集-
symmetric_difference()返回对称差集^
intersection_update()原地更新为交集
difference_update()原地更新为差集
symmetric_difference_update()原地更新为对称差集

判断类

方法描述
isdisjoint()判断是否无交集(无交集返回True)
issubset()判断是否为子集
issuperset()判断是否为父集

其他

方法/函数描述
copy()浅复制集合
len(set)返回集合元素个数
in / not in判断元素是否存在

今日核心总结

  1. 集合 = 无序 + 不重复

    • {}定义,空集合必须用set()
    • 自动去重是最大特点,适合做数据去重。
    • 元素必须不可变(不能放列表、字典)。
  2. 增删查三板斧

    • 增:add()单元素、update()批量。
    • 删:discard()更安全(不报错),remove()更严格(报错)。
    • 查:用in判断存在,用for遍历(无序)。
  3. 集合运算 = 数学集合

    • 并集|、交集&、差集-、对称差集^
    • 运算符和方法等价,运算符更简洁直观。
    • issubset()判子集、isdisjoint()判无交集。
  4. 与列表、字典的对比

特性列表 (list)字典 (dict)集合 (set)
符号[]{key:val}{}set()
有序3.7+有序
可重复键不重复否(自动去重)
可变
索引支持按键访问不支持

注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 15:31:13

轨道赛车赛道维护:三步恢复导电性能,提升竞速体验

1. 项目概述:当你的轨道赛车开始“力不从心”玩轨道槽赛车(Slot Car Racing)的朋友,尤其是那些家里有一套玩了几年甚至十几年的老轨道的,肯定都遇到过这样的场景:赛车跑着跑着突然“卡顿”一下,…

作者头像 李华
网站建设 2026/6/4 15:30:50

Arduino驱动16x2 LCD显示屏:从硬件连接到动态显示实战指南

1. 项目概述与核心价值如果你刚开始玩Arduino,想让你的项目“开口说话”,或者至少能显示点信息,那么搞懂一块16x2的LCD显示屏绝对是绕不开的一步。这玩意儿在电子爱好者的世界里,地位堪比螺丝刀和万用表,是构建人机交互…

作者头像 李华
网站建设 2026/6/4 15:30:31

Python OOP 核心概念:从零到写出优雅代码,这一篇就够了

你是不是也遇到过这种情况:写了一堆 Python 脚本,功能都能跑,但代码越写越长,改一个地方要翻半天,同事看了直摇头?别急,这不是你菜,是你还没用上面向对象编程(OOP&#x…

作者头像 李华
网站建设 2026/6/4 15:30:05

基于ESP8266与WS2811的六边形物联网时钟制作全攻略

1. 项目概述与核心思路最近在工作室里捣鼓一个桌面摆件,想做个既有科技感又实用的时钟。市面上那些数码管或者点阵屏的时钟看多了总觉得有点单调,于是把目光投向了可编程的RGB LED。最终决定动手做一个基于六边形像素矩阵的物联网时钟,核心就…

作者头像 李华
网站建设 2026/6/4 15:30:03

从零打造可穿戴发光眼镜:Arduino与NeoPixel的硬件创客实践

1. 项目概述:从动漫灵感到一个会发光的可穿戴道具作为一名喜欢鼓捣点硬件的创客,我经常在动漫和游戏里找灵感。前段时间,为了给一个《暗黑血统》里镰刀的道具找参考图,我偶然发现了《RWBY》这部动画。里面角色Maria Calavera那副标…

作者头像 李华