乐趣区

关于python:Python教程12Python数据结构集合set介绍

汇合是一种无序、可变的数据结构,它也是一种变量类型,汇合用于存储惟一的元素。汇合中的元素不能反复,并且没有固定的程序。在 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)

退出移动版