共计 4012 个字符,预计需要花费 11 分钟才能阅读完成。
汇合是一种无序、可变的数据结构,它也是一种变量类型,汇合用于存储惟一的元素。汇合中的元素不能反复,并且没有固定的程序。在 Python 提供了内置的 set
类型来示意汇合,所以关键字 set
就是汇合的意思。
你能够应用大括号 {}
或者 set()
函数来创立一个汇合。
my_set = {1, 2, 3} # 应用大括号创立汇合
print(my_set) # 输入: {1, 2, 3}
my_set = set([1, 2, 3]) # 应用 set() 函数创立汇合
print(my_set) # 输入: {1,2, 3}
须要留神的是,汇合是无序的,没有固定的程序。因而,汇合元素的程序可能与你创立或增加的程序不同。
汇合具备以下特点:
- 汇合中的元素是惟一的,不反复。如果反复雷同的元素,汇合将主动去重。
- 汇合是无序的,没有固定的程序。因而,你无奈像列表或元组那样索引来拜访汇合中的元素。
- 汇合是可迭代的,你能够应用
for
循环遍历汇合中的元素。 - 汇合是可变的,你能够增加、删除和批改汇合中的元素
创立汇合
要应用汇合,首先就必须要创立,那么在 Python 中,有哪些创立汇合的形式呢?你能够应用以下几种形式创立汇合。
1、应用大括号 {}
或者 set()
函数创立一个汇合,将元素用逗号隔开:
my_set = {1, 2, 3} # 应用大括号创立汇合
print(my_set) # 输入: {1, 2, 3}
my_set = set([1, 2, 3]) # 应用 set() 函数创立汇合
print(my_set) # 输入: {1, 2, 3}
留神,如果你应用空的大括号 {}
来创立一个对象,那么创立的将是一个空字典,而非空集合。因而,你必须应用 set()
函数来创立一个空集合:
empty_set = set()
print(empty_set) # 输入: set()
2、应用汇合推导式来创立汇合。汇合推导式的语法相似于列表推导式,只需将中括号 []
替换为大括号 {}
:
my_set = {i for i in range(1, 5)}
print(my_set) # 输入: {1, 2, 3, 4}
3、将其余可迭代的对象(列表、字符串、元组等)转换为汇合,能够应用 set()
函数来实现:
my_list = [1, 2, 3, 2]
my_set = set(my_list)
print(my_set) # 输入: {1, 2, 3}
my_string = 'hello'
my_set ={my_string}
print(my_set) # 输入: {'h', 'e', 'l', 'o'}
拜访汇合
因为汇合是无序的,没有固定的索引,应用索引拜访汇合中的元素是不可行的,要拜访汇合中的元素,你能够应用迭代器或者通过成员运算符来实现。
1、应用迭代器:通过应用 for 循环遍历汇合中的每个元素。
my_set = {1, 2, 3}
for item in my_set:
print(item)
2、应用成员运算:应用 in
或者 not in
运算符来查看元素是否存在于汇合中。
my_set = {1, 2, 3}
print(2 in my_set) # 输入: True
print(4 not in my_set) # 输入: True
删除汇合
在 Python 中,能够应用 del
关键字来删除汇合:
1、应用 del
关键字删除汇合变量,删除之后如果再次拜访,就会产生谬误。
my_set = {1, 2, 3}
del my_set
批改汇合元素
创立的汇合,咱们能够对其中的汇合元素进行操作,不仅能够增加元素,还是能够删除其中的元素。
增加汇合元素
1、应用 add()
办法向汇合中增加元素。
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 输入: {1, 2, 3, 4}
2、应用列表的解包操作增加多个元素。
my_set = {1, 2, 3}
new_elements = [4, 5]
my_set.update(new_elements)
print(my_set) # 输入: {1, 2, 3, 4, 5}
因为汇合的元素是惟一的,所以如果增加了反复的元素,那么反复的元素不会被增加到汇合中,当然执行的过程并不会产生报错,只是不会被增加进去而已。在应用 update()
办法时,传入的参数能够是一个汇合、列表或者其余可迭代对象。
删除汇合元素
1、应用 remove()
办法删除指定元素:remove()
办法会从汇合中删除指定的元素。如果汇合中不存在该元素,会引发 KeyError
异样。
my_set = {1, 2, 3, 4}
my_set.remove(3)
print(my_set) # 输入: {1, 2,4}
my_set.remove(5) # 删除不存在的元素,引发 KeyError 异样
2、应用 discard()
办法删除指定元素:discard()
办法会从汇合中删除指定的元素。如果汇合不存在该元素,该不会引发异样而是不进行任何操作。
my_set = {1, 2, 3 4}
my_set.discard(3)
(my_set) # 输入: {1, 2, 4}
my_set.discard(5) # 删除不存在的元素,不会引发异样
3、clear()
办法清空集合:clear()
办法会清空集合元素。
my_set = {1, 2, 3, 4}
my_set.clear()
print(my_set) # 输入: set()
汇合运算:
汇合的运算指的是对汇合进行一系列操作,包含求并集、交加、差集和对称差集等。这些运算可通过运算符或办法来进行。
并集(Union)
能够应用 |
运算符或者 union()
办法来获取两个汇合的并集。所谓的并集就是蕴含 set1 和 set2 汇合的所有元素。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1 | set2 # 应用 | 运算符
# 或者应用 union() 办法
# set3 = set1.union(set2)
print(set3) # 输入: {1, 2, 3, 4, 5}
交加(Intersection)
能够应用 &
运算符或者 intersection()
办法来获取两个汇合的交加。所谓的交加就是取 set1 和 set2 汇合的雷同元素,没有雷同元素的话返回的就是set()
。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1 & set2 # 应用 & 运算符
# 或者应用 intersection() 办法
# set3 = set1.intersection(set2)
print(set3) # 输入: {3}
差集(Difference)
能够应用 -
运算符或者 difference()
办法来获取两个汇合的差集。所谓的差集就是 set1 中 独有
的元素,如果 set1 中的元素,在 set2 中也有,那么就该元素就不能在差集中。如果是set2 - set1
,那就是 set2 中独有的元素。后果为空的返回就是set()
。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1 - set2 # 应用 - 运算符
# 或者应用 difference() 办法
# set3 = set1.difference(set2)
print(set3) # 输入: {1, 2}
对称差集(Symmetric Difference)
能够应用 ^
运算符或者 symmetric_difference()
办法来获取两个汇合的对称差集。所谓的对称差集就是 set1 和 set2 中雷同的元素剔除,剩下的元素就是对称差集。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1 ^ set2 #应用 ^ 运算符
# 或者应用 symmetric_difference() 办法
# set3 = set1.symmetric_difference(set2)
print(set3) # 输入: {1, 2, 4, 5}
须要留神的是,在应用汇合运算符时,两个汇合的元素类型必须统一。另外,汇合的元素是惟一的,不会呈现反复。
除了运算符外,还有其余一些罕用的汇合办法,比方 intersection_update()
办法用于在原汇合上更新为两个汇合的交加,difference_update()
办法用于在原汇合上更新为两个汇合的差集,symmetric_difference_update()
办法用于在原汇合上更新为两个汇合的对称差集。
汇合的相干函数
Python 中的汇合也有不少相干的办法,以下就是列举了汇合中罕用的办法,如有谬误的中央欢送指出。
函数名 | 解释 |
---|---|
add(element) | 向汇合中增加一个元素。 |
clear() | 移除汇合中的所有元素。 |
copy() | 返回汇合的正本。 |
difference(other_set[, …]) | 返回该汇合与其余汇合的差集。 |
difference_update(other_set[, …]) | 移除该汇合中与其余汇合雷同的元素,并更新原汇合。 |
discard(element) | 移除汇合中指定的元素。 |
intersection(other_set[, …]) | 返回该汇合与其余汇合的交加。 |
intersection_update(other_set[, …]) | 移除该汇合中与其余汇合不同的元素,并更新原汇合。 |
isdisjoint(other_set) | 如果两个汇合没有独特的元素,则返回 True;否则返回 False。 |
issubset(other_set) | 如果该汇合是另一个汇合的子集,则返回 True;否则返回 False。 |
issuperset(other_set) | 如果该汇合是另一个汇合的超集,则返回 True;否则返回 False。 |
pop() | 随机移除并返回汇合中的一个元素。 |
remove(element) | 移除汇合中指定的元素。若元素不存在,将引发 KeyError 谬误。 |
symmetric_difference(other_set) | 返回该汇合与其余汇合的对称差集。 |
symmetric_difference_update(other_set) | 移除该汇合中与其余汇合雷同的元素,并更新原汇合。 |
union(other_set[, …]) | 返回该汇合与其余汇合的并集。 |
update(other_set[, …]) | 向汇合中增加其余汇合的元素,并更新原汇合。 |
更多精彩内容,请关注同名公众:一点 sir(alittle-sir)