Python 中一个无序且元素惟一的数据类型,它是汇合。
汇合是啥
汇合是一个数据类型,它其中的每个元素的程序不固定,但惟一。如许绕的一句话,回味,肯定要好好回味。
汇合中的元素内容必须是不可变类型,例如整数、浮点数、字符串、元组等内容,可变的列表、字典、汇合不能够。
汇合自身是可变的,跟列表一样能够增删元素。
汇合的申明
截止到当初,小括号用来申明元组,中括号用来申明列表,大括号用来申明字典,那汇合怎么办?Python 中也是用大括号来申明汇合。当然你也能够通过 set
函数建设汇合。
汇合定义的语法格局如下:
my_set = {元素 1, 元素 2,...}
简略的代码示例如下:
my_set = {1, 2, 3, 3, 10, 4, 5, 6}
print(my_set)
数据输入之后,会发现反复的整数 3 只剩下一个了。还是因为汇合的元素是惟一的,呈现反复多的局部将会舍去。
如果在汇合中应用了可变类型作为元素,会报错。
my_set = {1, 2, 3, [3, 10, 4, 5, 6]}
# 谬误提醒:TypeError: unhashable type: 'list'
print(my_set)
这里须要留神下,空集合的申明不能应用 {}
,只用一个大括号示意的是空字典。申明一个空集合须要用到 set
函数。
set 函数定义汇合
应用 set 函数能够定义汇合,并且能够定义空集合。set 函数参数能够为字符串、列表、元组。
通过 set 定义空集合
my_dict = {}
my_set = set()
# 空字典
print(type(my_dict))
# 空集合
print(type(my_set))
set 将字符串转换成汇合
set 函数相似一个强制转换,能够将其它类型的转换成汇合。
my_set = set("my name is xiangpica")
print(my_set)
该内容会过滤反复字母,并且输入的程序不定,因为汇合是无序的。
汇合能够对元组去重
借助汇合元素的不容许反复,能够实现一些特定的成果,例如去重。
my_tuple = ("apple", "orange", "orange", "pear", "banana", "food")
my_set = set(my_tuple)
print(my_set)
汇合的操作
在学汇合相干操作前,须要在学习一些符号。
符号 | 含意 | |
---|---|---|
& | 交加 | |
并集 | ||
– | 差集 | |
^ | 对称差集 |
接下来的内容就十分相似高中线代外面的概念了,求汇合的交并差集。
交加(intersection)
交加就是求两个汇合共有的元素。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}
both = my_set1 & my_set2
print(both)
除了通过 &
符号以外,还能够通过汇合的 intersection
办法实现。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}
both = my_set1.intersection(my_set2)
print(both)
并集(union)
并集就是取所有汇合的所有元素,如果呈现反复的保留一个。应用符号 |
或者 union 办法实现。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}
both = my_set1 | my_set2
print(both)
应用 union 实现。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}
both = my_set1.union(my_set2)
print(both)
差集(difference)
对于求汇合的差集与交并集不同,有个先后顺序问题,例如属于 A 但不属于 B 示意为 A-B,同理属于 B 但不属于 A,示意为 B-A。
差集的符号是 -
,能够应用 difference 办法进行运算。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}
# 求解属于 A,但不属于 B 的元素
dif1 = my_set1 - my_set2
print(dif1)
# 求解属于 B,但不属于 A 的元素
dif2 = my_set2 - my_set1
print(dif2)
接下来如何应用 difference
办法去求差集就交给你本人实现啦。
对称差集(symmetric difference)
A 与 B 两个汇合,如果想要取得属于 A 或者 B 汇合的元素,但又不要属于 A 且属于 B 的元素,这时就是对称差集的利用场景了。
对称差集的符号是 ^
,办法名是 symmetric_difference
。
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}
dif = my_set1 ^ my_set2
print(dif)
上述代码就会输入既不属于 A 也不属于 B 的元素,即对称差集。
汇合的办法
汇合的增删
add 办法能够在汇合中减少元素,语法格局如下:
my_set.add(新增元素)
第一个须要留神的新的元素如果曾经存在汇合中,不会新增进去,第二个须要留神的是汇合是无序的,新减少元素的地位将不确定。
my_set = {"apple", "orange", "pear", "grape"}
my_set.add("new")
my_set.add("new")
print(my_set)
remove 办法能够删除汇合中元素,前提是该元素在汇合中,如果删除不存在的元素报错。
my_set = {"apple", "orange", "pear", "grape"}
my_set.remove("apple")
print(my_set)
# 第二次删除报错 因为 apple 曾经不在汇合中
my_set.remove("apple")
print(my_set)
discard 办法能够删除汇合元素,如果元素不存在不会报错。
my_set = {"apple", "orange", "pear", "grape"}
my_set.discard("apple")
print(my_set)
my_set.discard("apple")
print(my_set)
pop 办法为随机删除一个元素,被删除的元素会被返回,即能够用一个变量接管被删除的元素,如果汇合为空应用 pop 会报错。
my_set1 = {"apple", "orange", "pear", "grape"}
# pop 办法随机删除一个元素,将被删除的元素返回
var = my_set1.pop()
print(var)
# 空集合应用 pop 办法报错
my_set2 = set()
var = my_set2.pop()
print(var)
clear 办法删除汇合内的所有元素
my_set1 = {"apple", "orange", "pear", "grape"}
my_set1.clear()
print(my_set1)
汇合的其它办法
isdisjoint 办法用于判断两个汇合是否存在雷同元素,没有返回 True,否则返回 False。
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}
# 两个汇合没有雷同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool) # 返回 True
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon","apple"}
# 两个汇合有雷同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool)
issubset 该办法用于判断一个汇合是否是另一个汇合的子集,确定是返回 True,否则返回 False。
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}
# 第二个汇合不是第一个汇合的子集
ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 False
# 第二个汇合是第一个汇合的子集
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"orange","apple"}
ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 True
留神判断 A 是 B 的子集,格局是 A.issubset(B)
,程序别搞错。
issuperset 办法用于判断一个汇合是否是另一个汇合的父集,与 issubset 恰好相反,具体实现由大家自行实现。
update 办法用于将一个汇合的元素增加到另一个汇合内,语法格局如下:
被增加的汇合 A.update(待增加的汇合 B)
该办法谁在前就是给谁增加。
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}
my_set1.update(my_set2)
print(my_set1)
其它一些办法,本轮滚雪球阶段只做理解。
- intersection\_update 此办法用于求多个汇合的交加
- difference\_update 删除汇合内与另一汇合反复的元素
- symmetric\_difference\_update 相似对称差集的用法
汇合可用的内置函数
max、min、sum
以上内置函数作用域汇合与列表应用规定统一,自行测试即可。
len
获取汇合元素的数量。
sorted
应用该函数能够对汇合进行排序。
解冻汇合 frozenset
汇合中的元素能够增加与删除,与列表能够对应。
还存在一种不可进行增加与删除元素的汇合,叫做解冻汇合,与元组能够对应学习。
解冻汇合不做开展解说,有趣味的能够检索一些,不过我感觉这节课内容曾经十分多啦。
这篇博客的总结
汇合,一个无序且元素必须惟一的容器型数据类型,在橡皮擦的编程生涯中,汇合常常用来去重,效率高、编写简略,值得把握。
下篇博客开始,咱们将进入 Python 函数的世界,难度要来了哦~
最初一碗毒鸡汤
当你学会破罐破摔 你会发现这世界恍然大悟 O(∩\_∩)O 哈哈~