python——集合(一)

文章目录

  • 集合 set
    • 创建集合
    • 访问集合项
    • in关键字
    • 添加集合元素
    • 删除集合元素
    • 复制集合
    • 使用操作符对集合进行交集、并集、差集、对称差集
    • 使用方法对集合进行交集、并集、差集、对称差集
    • 子集和超集
  • frozenset 冻结集合? 不可变集合!

集合 set

什么是集合?简而言之,集合是一个无序、不重复的元素集。这与列表和元组都是有顺序的,而且它们中的元素是可以重复的不同。

创建集合

my_set = {1, 2, 3} # 在定义集合时直接添加元素
print(my_set)
# 也可以使用set()函数,不过还是推荐直接第一种直接定义的方式
# fruits = set(["apple", "banana", "peach", "watermelon"])
# print(fruits)

在这里插入图片描述

当我们创建下图中的集合并打印后:

在这里插入图片描述

我们会发现,打印出来的顺序和我们一开始输入的顺序并不一样,这是因为集合是无序的!

再次运行,可能会发现顺序仍然不一样:

在这里插入图片描述

**作为一个无序集合,集合不记录元素位置或插入顺序。**因此,集合也不支持索引、切片或其他序列行为

那我们是否可以通过索引(像列表,或者元组那样),或者键(像字典那样)来访问集合中的元素?

答案是否定的。首先因为集合是无序的,所以,没有什么“索引”,更不要说打算用索引来访问集合中的元素了。

也不能通过键来访问集合中的元素,因为集合不同于字典(拥有键值对),没有键,所以不能。

形象地来讲,**我们可以将它看作是一袋弹珠,其中每个弹珠都不同于其他弹珠。**所以我们无法从这个袋子中拿出一个特定的弹珠——比如:我们不能说“给我第三个弹珠”,因为弹珠是没有特定顺序的。

访问集合项

使用for循环访问集合项:

在这里插入图片描述

你会发现,输出的元素的顺序并不和我们定义的顺序相同,这其实还是因为集合的“无序性”,其实主要是因为其元素的存储顺序由哈希值、哈希表实现细节和元素插入时的哈希冲突解决策略决定,与定义时的顺序无关。

在这个例子中,我们就像一个好奇的孩子,伸进我们的弹珠袋(我们的集合),一次拉出一个弹珠(项)来检查。只不过for循环自动为我们执行此操作,遍历集合中的每个项。

使用while循环借助列表遍历集合:

fruits = {"apple", "banana", "cherry"}
fruit_list = list(fruits)
i = 0
while i < len(fruit_list):print(fruit_list[i])i += 1# i++ # 在 Python 中,i++ 这种用法是不合法的,因为 Python 要求在一行中只能有一个语句。如果你尝试在一行中写 i+ 后面直接换行,Python 解释器会报语法错误,因为它期望在 + 之后有操作数。

在这里插入图片描述

in关键字

我们经常需要检查集合中是否存在特定的项,我们可以使用in关键字来实现。

在这里插入图片描述

这就像我们拿着一个特定颜色的弹珠,看看我们是否能找到那个颜色的弹珠。

添加集合元素

  • 只添加一项的话,我们常使用add()方法
fruit_basket = {"apple", "banana", "orange"}
fruit_basket.add("strawberry")
# fruit_basket.add("apple")
print(fruit_basket)

如果我们尝试添加已经在集合中的项,Python会简单地忽略它。我们的水果篮子里不允许有重复!

  • 如果我们想一次性添加多个项,我们常常使用update()方法,update()方法可以接受各种可迭代对象,如列表、元组,甚至是其他集合。
fruit_basket = {"apple", "banana", "orange"}
# fruit_basket.update({"strawberry", "kiwi", "pear"})
fruit_basket.update(["strawberry", "kiwi", "pear"])
# fruit_basket.update(("strawberry", "kiwi", "pear"))
print(fruit_basket)
  • 从数学角度来考虑,我们还可以使用并集运算符(|)来合并两个集合。这就像是我们合并了两个独特的弹珠盒。

在这里插入图片描述

  • 也可以使用union()方法

在这里插入图片描述

当然也可以使用上面说过的update()方法:basket1.update(basket2)

删除集合元素

my_set = {1, 2, 3}
element = my_set.pop()  # 移除并返回任意一个元素
print(f"Removed element: {element}")
print("Removed element:" + str(element))
my_set.remove(2)
my_set.remove(0)
my_set.discard(0)
my_set.discard(1)
my_set.clear()
print(my_set)
  • pop()方法:移除并返回集合中随机的一个元素,就好像我们闭上双眼,随机从袋子中取出一个弹珠一样

在这里插入图片描述

  • remove()方法:移除指定的确切元素;如果集合中不存在该元素,则会报错

在这里插入图片描述

  • discard()方法:移除指定的确切元素;即使集合中不存在该元素,也不会报错

在这里插入图片描述

  • clear()方法:一次性清空集合中的所有元素

在这里插入图片描述

复制集合

为什么我们需要复制集合?复制集合在你想要创建一个具有与现有集合相同元素的新集合时至关重要,但你不想让新集合的更改影响原始集合。这就像复印一份文件——你可以在复印件上写字而不会更改原始文件。

我们可以使用copy() 方法复制集合:

在这里插入图片描述

使用操作符对集合进行交集、并集、差集、对称差集

运算符名称描述
|并集组合两个集合中的元素
&交集返回两个集合中共有的元素
-差集返回第一个集合中有但第二个集合中没有的元素
^对称差集返回在任一集合中,但不同时在两个集合中的元素
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union = set1 | set2
print(f"并集:{union}")
intersection = set1 & set2
print(f"交集:{intersection}")
difference = set1 - set2
print(f"差集:{difference}")
symmetric_difference = set1 ^ set2
print(f"对称差集:{symmetric_difference}")

在这里插入图片描述

使用方法对集合进行交集、并集、差集、对称差集

  • intersection()方法
all_fruits = {"apple", "banana", "cherry", "strawberry", "pear"}
citrus_fruits = {"lemon", "orange", "mango"}
my_fruits = {"apple", "cherry", "orange"}
common_fruits = all_fruits.intersection(my_fruits)
print(common_fruits)# 输出:{'apple', 'cherry'}

这就相当于我们有两个弹珠袋,我们正在挑出两个袋子中都有的弹珠。

  • union()方法上面已有示例,此处不再赘述。

  • difference()方法找到在一个集合中但不在另一个集合中的元素。这就像找出哪些朋友没有被邀请到另一个派对。

# 我们创建两个编程语言集合
popular_languages = {"Python", "JavaScript", "Java", "C++"}
languages_i_know = {"Python", "JavaScript", "HTML"}# 现在,我们找到差集
languages_to_learn = popular_languages.difference(languages_i_know)
print(languages_to_learn)
# 输出:{'C++', 'Java'}
  • symmetric_difference()方法将给出所有在任一集合中但不在两个集合中都有的元素。
# Let's create two sets of books
my_books = {"1984", "The Hobbit", "Pride and Prejudice"}
friend_books = {"The Hobbit", "To Kill a Mockingbird", "Pride and Prejudice"}
unique_books = my_books.symmetric_difference(friend_books)
print(unique_books)

子集和超集

  • 使用issubset()方法来判断一个集合是否是另一个集合的子集

  • 使用issuperset()方法来判断一个集合是否是另一个集合的超集

在这里插入图片描述

frozenset 冻结集合? 不可变集合!

frozenset 是 Python 中的一种数据结构,它也是集合(set)的一种。与常规的集合(set)相比,frozenset 是不可变的,这意味着一旦创建了 frozenset,就不能添加、删除或修改其中的元素。

创建 frozenset

frozenset 可以用与创建集合类似的方式创建,但使用 frozenset() 函数:

my_frozenset = frozenset([1, 2, 3])

或者直接使用字面量语法:

my_frozenset = frozenset({1, 2, 3})

frozenset 具有不可变性,frozenset 对象一旦创建,就不能修改。尝试修改 frozenset 将导致运行时错误(RuntimeError)。由于不可变性,frozenset 可以作为字典的键或另一个集合的元素。

# 创建一个 frozenset
my_frozenset = frozenset([1, 2, 3])
my_frozenset.add(4)# frozenset 可以作为字典的键
my_dict = {my_frozenset: "value"}
print(my_dict)  # 输出:{frozenset({1, 2, 3}): 'value'}

在这里插入图片描述

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

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

相关文章

DeepSeek 与网络安全:AI 在网络安全领域的应用与挑战

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在当今数字化时代&#xff0c;网络安全已成为国家、企业和个人面临的重要挑战。从传统的病毒、木马攻击&#xff0c;到高…

【Blender】二、建模篇--05,阵列修改器与晶格形变

阵列修改器是bender里面一个比较常用的修改器,所以我们单独开口来讲,我们会先从几片树叶出发,然后我们用阵列修改器把这几片树叶变成这样的造型和这样的造型。这两个造型分别就代表着阵列修改器最常用的两种偏移方法,我们现在就开始我们先来做几个树叶。 1.树叶建模 首先…

【Python 专题】数据结构 树

LeetCode 题目104. 二叉树的最大深度(gif 图解)方法一:后序遍历(DFS)方法二:层序遍历(BFS)872. 叶子相似的树(DFS 遍历)1448. 统计二叉树中好节点的数目(DFS 遍历)437. 路径总和 III(前缀和 + DFS 回溯)1372. 二叉树中的最长交错路径(DFS)236. 二叉树的最近公共…

Linux下基本指令(4)

Linux权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…

ubuntu部署小笔记-采坑

ubuntu部署小笔记 搭建前端控制端后端前端nginx反向代理使用ubuntu部署nextjs项目问题一 如何访问端口号配置后台运行该进程pm2 问题二 包体过大生产环境下所需文件 问题三 部署在vercel时出现的问题需要魔法访问后端api时&#xff0c;必须使用https协议电脑端访问正常&#xf…

【联盛德 W803-Pico 试用】简介、工程测试

【联盛德 W803-Pico 试用】简介、工程测试 本文介绍了联盛德微电子 W803-Pico 开发板的基本信息、环境搭建、工程测试等内容。简介包含开发板功能、主控参数及特点、开发板原理图等信息&#xff0c;工程测试包括 Blink、串口打印等方案的演示。 活动详情&#xff1a;联盛德问答…

cursor使用记录

一、如何查看自己登录的是哪个账号 操作路径&#xff1a;Cursor -- 首选项 -- Cursor Setting &#xff08;有快捷键&#xff09; 二、状态修改为竖排&#xff08;默认是横排&#xff09; 默认如图展示&#xff0c;想要像vscode、idea等等在左侧竖着展示 操作路径&#xff1…

gitlab 解决双重认证无法登录remote: HTTP Basic: Access denied.

问题&#xff1a;gitlab开启了双因素认证 如进行了 OAuth configuration 在进行git操作时如下提示 remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead o…

C语言基础学习指南:从零入门到实战应用——适合零基础学习者与进阶巩固

目录 一、C语言概述与开发环境搭建 二、核心语法与数据类型 三、控制结构与运算符 四、函数与模块化编程 五、指针与内存管理 六、实践建议与资源推荐 结语 一、C语言概述与开发环境搭建 C语言是一种高效、灵活的通用编程语言&#xff0c;广泛应用于系统开发、嵌入式系…

C# 委托——lambda

lambda表达式不简化写起来和匿名函数很像&#xff0c;而匿名函数通常赋值给委托&#xff0c;通过委托进行调用。以下我们对lambda和委托的基本规则与使用进行整理&#xff0c;同时为了加深理解和记忆&#xff0c;我们整理了委托是如何一步步演化到lambda。 1. 委托 委托是一个…

【每日论文】TESS 2: A Large-Scale Generalist Diffusion Language Model

下载PDF或阅读论文&#xff0c;请点击&#xff1a;LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 我们推出了TESS 2&#xff0c;这是一种通用的指令跟随扩散语言模型&#xff0c;其性能优于当代的指令调整扩散模型&#xff0c;有…

conda 配置源

无论是Anaconda vs Miniconda vs Miniforge 中的哪个&#xff0c;只要使用conda就涉及源&#xff0c;换源的目的是为了加速包的获取 修改配置文件 通过修改用户目录下的 .condarc 文件来使用 不同系统下的 .condarc 目录如下&#xff1a; Linux: ${HOME}/.condarcmacOS: ${…

AI大模型发展对语音直播交友系统源码开发搭建的影响

近年来&#xff0c;AI大模型技术突飞猛进&#xff0c;为语音直播交友系统的源码开发搭建带来了深远影响。本文将从技术发展层面&#xff0c;探讨AI大模型如何赋能语音直播交友系统&#xff0c;并分析其对开发流程、功能实现和用户体验等方面带来的变革。 一、技术赋能&#xff…

C++面试题,TCP和UDP方面(1)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言TCP和UDP的区别UDP如何实现可靠TCP滑动窗口原理TCP流量控制TCP超时重传总结 前言 这是个人总结的C方向的面试题,TCP和UDP方面&#xff0…

Huatuo热更新--如何使用

在安装完huatuo热更新插件后就要开始学习如何使用了。 1.创建主框渐Main 新建文件夹Main&#xff08;可自定义&#xff09;&#xff0c;然后按下图创建文件&#xff0c;注意名称与文件夹名称保持一致 然后新建场景&#xff08;Init场景&#xff09;&#xff0c;添加3个空物体…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本&#xff1a; 2. springboot项目搭建 可以集成在自己的项目里&#xff0c;也可以到 spring.io 生成一个项目 生成的话&#xff0c;如下…

如何在 macOS 上配置 MySQL 环境变量

如何在 macOS 上配置 MySQL 环境变量 步骤 1: 查找 MySQL 安装路径 打开终端&#xff0c;使用以下命令查找 mysql 的可执行文件路径&#xff1a; which mysql如果该命令没有返回结果&#xff0c;可以使用 find 命令&#xff1a; sudo find / -name "mysql" 2>/de…

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据&#xff0c;根据指定的不同类型的数据配置规则来解析成对应的代码文本&#xff0c;将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…

【vue项目中如何实现一段文字跑马灯效果】

在Vue项目中实现一段文字跑马灯效果&#xff0c;可以通过多种方式实现&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用CSS动画和Vue数据绑定 这种方法通过CSS动画实现文字的滚动效果&#xff0c;并结合Vue的数据绑定动态更新文本内容。 步骤&#xff…

AcWing走迷宫-最短路问题-BFS求解

题目描述 给定一个 n * m 的二维整数数组&#xff0c;用来表示一个迷宫&#xff0c;数组中只包含 0 或 1&#xff0c;其中 0 表示可以走的路&#xff0c;1 表示不可通过的墙壁。 最初&#xff0c;有一个人位于左上角 (1, 1) 处&#xff0c;已知该人每次可以向上、下、左、右任…