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

爱喝兽奶的荒天帝 2024-06-14 09:35:02 阅读 75

文章目录

🚀一、元组⭐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_bprint(set_jiao) # {1}# 并集 |set_bing = set_a | set_bprint(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 是否包含 集合aset13 = { 1, 2, 'a'}set14 = { 1, 3, 'b'}set15 = { 1}print(set13.issubset(set14)) # Falseprint(set15.issubset(set14)) # True issuperset : 判断该方法的参数集合是否为指定集合的子集

# a.issuperset(b) : 集合b是否为集合a的子集 判断集合a 是否包含 集合bset13 = { 1, 2, 'a'}set14 = { 1, 3, 'b'}set15 = { 1}print(set13.issuperset(set14)) # Falseprint(set15.issuperset(set14)) # Falseprint(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() 方法同时获取多个集合的交集,并修改 set1set1 = { 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'}

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。