乐趣区

关于后端:小手一抬学Python-Python-集合三板斧

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 哈哈~

退出移动版