【Python核心数据结构探秘】:元组与字典的完美协奏曲

news2024/12/24 9:14:43

文章目录

      • 🚀一、元组
        • ⭐1. 元组查询的相关方法
        • ❤️2. 坑点
        • 🎬3. 修改元组
      • 🌈二、集合
        • ⭐1. 集合踩坑
        • ❤️2. 集合特点
          • 💥无序性
          • 💥唯一性
        • ☔3. 集合(交,并,补)
        • 🎬4. 集合操作方法
          • 💥💥增
          • 💥💥删
          • 💥💥(增)
          • 💥💥查

🚀一、元组

在这里插入图片描述

  • 元组:tuple
  • 元组符号:()
  • 元组属于不可变类型(不可变序列)
  • 元组是序列类型(容器序列)
  • 元组不提供方法修改,但是可以转类型进行操作
⭐1. 元组查询的相关方法
  • index 查询指定元素第一次出现的下标
tuple1 = (1, 'hah', '帅')
print(tuple1.index('帅'))  # 2

在这里插入图片描述
注意

  • 如果元组中不存在你要查找的值,index() 方法会抛出一个 ValueError 异常。

  • 由于元组是不可变的,找到索引通常是为了了解结构,而不是为了修改元组内容(因为无法修改)。

  • index() 方法只返回第一个匹配项的索引,即使该值在元组中出现了多次。

  • count 查询指定元素出现的次数

count() 方法,用于统计元组中某个元素出现的次数。

tuple.count(element)
  • tuple:你想要在其内部计数的元组。
  • element:你想要统计其出现次数的元素。
tuple2 = ('帅', 1, '帅', 'hah', '帅')
print(tuple2.count('帅'))  # 3

在这里插入图片描述

❤️2. 坑点

在Python中,元组是一种不可变的序列类型。当定义一个只包含一个元素的元组时,确实会出现一些特殊情况。如果你直接写作(元素),Python不会把它解析为一个元组,而是将其视为一个单纯的括号包围的表达式。为了明确表示这是一个只有一个元素的元组,你应该在元素后面加上一个逗号,即(元素,)。

  • 不加逗号:single_item = (42),这在Python中实际上被视为一个整数42,而不是一个元组。
  • 加逗号:single_tuple = (42,),这样就明确地定义了一个只包含一个元素42的元组。

这是因为括号()在Python中还用于表示运算优先级,以及在函数调用时包围参数列表。为了消除歧义,当创建一个只有一个元素的元组时,添加逗号是必要的。

tuple3 = (1)
print(type(tuple3))  # <class 'int'>

tuple4 = (1,)
print(type(tuple4))  # <class 'tuple'>

# 当()中只存在一个元素时, 其后没有 , 号, 那么其类型保持元素原类型
#                        有 , 号 ---- 为元组类型

在这里插入图片描述

🎬3. 修改元组
# 通过转类型的方式进行修改

tuple1 = (1, 'qwe', 'hahah')

# 结构相似的数据类型--- list
# 通过list方法直接将其强转为列表
list1 = list(tuple1)
# print(list1)  # [1, 'qwe', 'hahah']

# 操作数据
list1.append('快乐')
# print(list1)  # [1, 'qwe', 'hahah', '快乐']

# 转回列表 --- 通过tuple方法
tuple2 = tuple(list1)
print(tuple2)  # (1, 'qwe', 'hahah', '快乐')

在这里插入图片描述

🌈二、集合

  • 集合:set
  • 集合符号:{数据1,数据2…}
  • 集合属于可变类型
  • 集合数据是无序的(无序性)
  • 集合每一个元素是唯一的(唯一性)
  • 集合不属于序列
集合(set)是一种无序、不重复元素的集合,它具有判定成员资格、消除重复元素等特点。集合的元素必须是不可变的类型,例如整数、浮点数、字符串、元组等,但不能包含可变类型的对象,例如列表、字典等。集合也不是序列类型,因为它们不支持索引、切片等序列操作。
⭐1. 集合踩坑

空集合问题

set1 = {}
print(type(set1))  # &lt;class 'dict'&gt;

# 原因:集合(set)与字典(dict)符号一样,但内部数据结构不同,当为{}时,它是被识别为字典

# 因此 空集合 的创建是用 set()

set2 = set()
print(type(set2))  # <class 'set'>

在这里插入图片描述

❤️2. 集合特点
💥无序性
set1 = {'hah', 1, '快'}
print(set1)
# 多执行几次,发现数据出来顺序是乱的
# {1, 'hah', '快'}
# {'hah', 1, '快'}

在这里插入图片描述

💥唯一性
set2 = {'hah', 1, '快', 1, 1, 1}
print(set2)  # {1, '快', 'hah'}

在这里插入图片描述

☔3. 集合(交,并,补)

在这里插入图片描述

set_a = {1, 2, 'a'}
set_b = {1, 3, 'b'}

# 交集  &
set_jiao = set_a & set_b
print(set_jiao)  # {1}

# 并集  |
set_bing = set_a | set_b
print(set_bing)  # {'b', 1, 2, 3, 'a'}

# 补集  -
set_bu_b = set_a - set_b  # set_b的补集
print(set_bu_b)  # {'a', 2}
set_bu_a = set_b - set_a  # set_a的补集
print(set_bu_a)  # {'b', 3}

在这里插入图片描述

🎬4. 集合操作方法
💥💥增
  • add: 是把要传入的元素做为一个整个添加到集合中

集合(set)是一个无序的、不重复元素的序列。add() 方法是集合的一个内置方法,用于向集合中添加一个元素。如果添加的元素已经在集合中存在,则该方法不会有任何效果,因为集合的特性决定了它不能包含重复的元素。

set.add(element)
  • set:你要向其添加元素的集合。
  • element:你想要添加到集合中的元素。
set3 = {1, 'ahah', '数据'}
set3.add('shu')
print(set3) # {'ahah', 1, 'shu', '数据'}

在这里插入图片描述

💥💥删
  • pop: 删除并且返回 set “集合”中的一个不确定的元素, 如果集合为空则引发 KeyError

集合(set)的 pop() 方法用于随机移除集合中的一个元素并返回该元素。因为集合是无序的,所以无法预测哪个元素会被移除。如果集合为空,调用 pop() 方法会引发 KeyError 异常。

element = set.pop()
  • set:你要从中移除并返回一个随机元素的集合。
  • element:被移除的元素。
# 随机删
set4 = {1, 'ahah', '数据'}
set4.pop()
print(set4)  # {'ahah', '数据'}

在这里插入图片描述

  • remove:从 set “集合”中删除指定元素 , 如果不存在则引发 KeyError

集合(set)的 remove() 方法用于移除集合中指定的元素。如果元素存在于集合中,该方法会移除这个元素,并且不返回任何值。如果尝试移除一个不存在于集合中的元素,remove() 方法会引发 KeyError 异常。
语法:

set.remove(element)
  • set:你想要从中移除元素的集合。
  • element:你想要从集合中移除的指定元素。
set5 = {1, 'ahah', '数据'}
set5.remove('ahah')
print(set5)  # {1, '数据'}

set7 = {1, 'ahah', '数据'}
set7.remove('kuail')  # KeyError: 'kuail'

在这里插入图片描述

  • discard: 如果在 set “集合”中存在元素 x, 则删除 ,不存在不报错
set5 = {1, 'ahah', '数据'}
set5.discard('ahah')
print(set5)  # {1, '数据'}

set7 = {1, 'ahah', '数据'}
set7.discard('kuail')
print(set7)  # {1, 'ahah', '数据'}

在这里插入图片描述

  • clear: 清空集合里面的所有元素
set8 = {1, 'ahah', '数据'}
set8.clear()
print(set8)  # set()   --空集合
💥💥(增)
  • update:可以在集合里面添加多项
set9 = {1, 'ahah', '数据'}
set9.update([1, '2', 3, '4'])
print(set9)  # {1, 3, '4', 'ahah', '2', '数据'}

set10 = {1, 'ahah', '数据'}
set10.update('你快乐吗?')
print(set10)  # {1, '吗', '数据', 'ahah', '你', '乐', '?', '快'}

在这里插入图片描述

💥💥查
  • isdisjoint: 是否无交集(无交集:True 有交集:False)
set11 = {1, 2, 'a'}
set12 = {1, 3, 'b'}

print(set11.isdisjoint(set12))  # False
  • issubset: 判断指定集合是否为该方法参数集合的子集。 是True, 不是False
# a.issubset(b) :  集合a是否为集合b的子集   判断集合b 是否包含 集合a

set13 = {1, 2, 'a'}
set14 = {1, 3, 'b'}
set15 = {1}
print(set13.issubset(set14))  # False
print(set15.issubset(set14))  # True
  • issuperset : 判断该方法的参数集合是否为指定集合的子集
# a.issuperset(b) :  集合b是否为集合a的子集   判断集合a 是否包含 集合b

set13 = {1, 2, 'a'}
set14 = {1, 3, 'b'}
set15 = {1}
print(set13.issuperset(set14))  # False
print(set15.issuperset(set14))  # False
print(set14.issuperset(set15))  # True

在这里插入图片描述

  • intersection: 返回集合的交集
set16 = {1, 2, 'a'}
set17 = {1, 3, 'b'}

print(set16.intersection(set17))  # {1}
  • intersection_update: 移除 指定集合 中不存在于 方法中的接收集合 中的元素(修改当前集合,使其只包含与另一个指定集合相同的元素。)
set16 = {1, 2, 'a'}
set17 = {1, 3, 'b'}
# 移除 set16 中不存在于 set17 中的元素
set16.intersection_update(set17)
print(set16)  # {1}
print(set17)  # {1, 3, 'b'}

# 使用 intersection_update() 方法同时获取多个集合的交集,并修改 set1
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7}
set3 = {3, 4, 5}
set4 = {1, 3, 5}
set1.intersection_update(set2, set3, set4)
print(set1)      # 输出结果为 {5}

在这里插入图片描述

  • symmetric_difference: 返回两个集合中不重复的元素集合。
set18 = {1, 2, 'a'}
set19 = {1, 3, 'b'}

print(set18.symmetric_difference(set19))  # {2, 3, 'b', 'a'}

在这里插入图片描述

  • symmetric_difference_update: 用于修改当前集合,使其只包含存在于当前集合或另一个指定集合中的元素,但不包含同时存在于两个集合中的元素。
set18 = {1, 2, 'a'}
set19 = {1, 3, 'b'}

set18.symmetric_difference_update(set19)
print(set18)  # {2, 3, 'a', 'b'}
print(set19)  # {'b', 1, 3}

在这里插入图片描述

  • union: 返回两个集合的并集两个集合的并集
set20 = {1, 2, 'a'}
set21 = {1, 3, 'b'}

print(set20.union(set21))  # {'a', 1, 2, 3, 'b'}

在这里插入图片描述

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

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

相关文章

月薪6万,想离职...

大家好&#xff0c;我是无界生长&#xff0c;国内最大AI付费社群“AI破局俱乐部”初创合伙人。这是我的第 39 篇原创文章——《月薪6万&#xff0c;想离职...》 是的&#xff0c;你没有看错&#xff0c;我月薪6万&#xff0c;却想离职&#xff0c;很不可思议吧&#xff1f;周围…

如何为色盲适配图形用户界面

首发日期 2024-05-25, 以下为原文内容: 答案很简单: 把彩色去掉, 测试. 色盲, 正式名称 色觉异常. 众所周知, 色盲分不清颜色. 如果用户界面设计的不合理, 比如不同项目只使用颜色区分, 而没有形状区分, 那么色盲使用起来就会非常难受, 甚至无法使用. 色盲中最严重的情况称为…

车载电子电气架构 - 智能座舱技术及功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

【MySQL】(基础篇六) —— 过滤数据

过滤数据 本文将讲授如何使用SELECT语句的WHERE子句指定搜索条件。 WHERE子句 数据库表一般包含大量的数据&#xff0c;很少需要检索表中所有行。通常只会根据特定操作或需要提取表数据的子集。只检索所需数据需要指定搜索条件&#xff08;search criteria&#xff09;&…

FedAvg论文

论文&#xff1a;Communication-Efficient Learning of Deep Networks from Decentralized Data 原code Reproducing 通过阅读帖子进行的了解。 联邦平均算法就是最典型的平均算法之一。将每个客户端上的本地随机梯度下降和执行模型的平均服务器结合在一起。 联邦优化问题 数…

08 Dataset and DataLoader (加载数据集)

本节内容是学习 刘二大人的《PyTorch深度学习实践》的 08 Dataset and DataLoader (加载数据集&#xff09;。 上节内容&#xff1a;07 Multiple Dimension Input (处理多维特征的输入)-CSDN博客 这节内容&#xff1a; 目录 一、Epoch,Batch-Size,Iterations 二、DataLoad…

【quarks系列】基于Dockerfile构建native镜像

目录 Dockerfile构建代码测试 Dockerfile FROM quay.io/quarkus/ubi-quarkus-native-image:22.3-java11 AS buildWORKDIR /workspace COPY . .RUN ./mvnw -DskipTeststrue clean package -Dnative -U# Stage 2: Create the minimal runtime image FROM registry.access.redhat…

linux的持续性学习

安装php 第一步&#xff1a;配置yum源 第二步&#xff1a;下载php。 yum install php php-gd php-fpm php-mysql -y 第三步&#xff1a;启动php。 systemctl start php-fpm 第四步&#xff1a;检查php是否启动 lsof -i :9000 计划任务 作用&am…

ollama webui 11434 connection refused

报错&#xff1a;host.docker.internal:11434 ssl:default [Connection refused] 将/etc/systemd/system/ollama.service中加上如下红框两行 然后 systemctl daemon-reload systemctl restart ollama然后删掉之前的container。 最后 sudo docker run -d -p 4000:8080 --add-…

初识volatile

volatile&#xff1a;可见性、不能保证原子性(数据不安全)、禁止指令重排 可见性&#xff1a;多线程修改共享内存的变量的时候&#xff0c;修改后会通知其他线程修改后的值&#xff0c;此时其他线程可以读取到修改后变量的值。 指令重排&#xff1a;源代码的代码顺序与编译后字…

十大排序

本文将以「 通俗易懂」的方式来描述排序的基本实现。 &#x1f9d1;‍&#x1f4bb;阅读本文前&#xff0c;需要一点点编程基础和一点点数据结构知识 本文的所有代码以cpp实现 文章目录 排序的定义 插入排序 ⭐ &#x1f9d0;算法描述 &#x1f496;具体实现 &#x1f…

一文了解SpringBoot

1 springboot介绍 1)springboot是什么? Spring Boot是一个用于简化Java应用程序开发的框架。它基于Spring框架,继承了Spring框架原有的优秀特性,比如IOC、AOP等, 他并不是用来代替Spring的解决方案,而是和Spring框架紧密结合,进一步简化了Spring应用的整个搭建和开发过程…

操作系统真象还原:内存管理系统

第8章-内存管理系统 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 8.1 Makefile简介 8.1.1 Makefile是什么 8.1.2 makefile基本语法 make 给咱们提供了方法&#xff0c;可以在命令之前加个字符’&#xff20;’&#xff0c;这样就不会输出命令本身…

网络分析(ArcPy)

一.前言 GIS中的网络分析最重要的便是纠正拓扑关系&#xff0c;建立矫正好的网络数据集&#xff0c;再进行网络分析&#xff0c;一般大家都是鼠标在arcgis上点点点&#xff0c;今天说一下Arcpy来解决的方案&#xff0c;对python的要求并不高,具体api参数查询arcgis帮助文档即可…

Java_Map集合

认识Map集合 Map集合称为双列集合&#xff0c;格式&#xff1a;{key1value&#xff0c;key2value2,key3value3,…},一次需要存一对数据作为一个元素。 Map集合的每个元素“Keyvalue” 称为一个键值对/键值对对象/一个Entry对象&#xff0c;Map集合也被叫做“键值对集合” Map集…

Simscape Multibody与RigidBodyTree:机器人建模

RigidBodyTree&#xff1a;主要用于表示机器人刚体结构的动力学模型&#xff0c;重点关注机器人的几何结构、质量和力矩&#xff0c;以及它们如何随时间变化。它通常用于计算机器人的运动和受力情况。Simscape Multibody&#xff1a;作为Simscape的一个子模块&#xff0c;专门用…

10.2 Go Channel

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

虚拟机调用摄像头设备一直 select timeout问题的解决

在VMware里面调用v4l2-ctl捕获图像&#xff0c;或者opencv的VideoCapture(0)捕获图像&#xff0c;或者直接调用v4l2的函数&#xff0c;在streamon后&#xff0c;调用select读取数据&#xff0c;均会一直提示select timeout的问题&#xff0c;大概率是由于USB版本的兼容性造成的…

【氵】Archlinux+KDE Plasma 6+Wayland 安装nvidia驱动 / 开启HDR

参考: NVIDIA - Arch Linux 中文维基 &#xff08;其实就是把 wiki 简化了一下 注&#xff1a;本教程适用 GeForce 930 起、10 系至 20 系、 Quadro / Tesla / Tegra K-系列以及更新的显卡&#xff08;NV110 以及更新的显卡家族&#xff09;&#xff0c;此处以 RTX3060 为例 …

PHP 寿光蔬菜大棚宣传平台-计算机毕业设计源码88288

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于寿光蔬菜大棚宣传平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了寿光蔬菜大棚宣传平台&#xff0c;它彻底…