Python-集合,从基础到进阶大总结,进来查漏补缺

在这里插入图片描述
B站|公众号:啥都会一点的研究生

hello,我是啥都生,本期将Python中集合涉及的从基础到进阶用法,全部总结归纳,一起看看吧

集合是一个无序的元素不重复的序列,依然从创建开始说起,可以使用大括号与set函数创建集合,但需注意的是,若定义空集合,不能使用大括号,因为将变成字典

set1 = set()
set2 = {}
set3 = {1}

print(type(set1))
print(type(set2))
print(type(set3))

>>> <class 'set'>
>>> <class 'dict'>
>>> <class 'set'>

如下所示很好的展示了集合无序元素不重复两大特性

set1 = {'h', 'e', 'l', 'l', 'o'}

print(set1)

>>> {'h', 'o', 'l', 'e'}

使用set函数也可以轻松将列表与字符串类型转换为集合,但注意输出格式

set1 = set([1, 2, 3])
set2 = set("hello")

print(set1)
print(set2)

>>> {1, 2, 3}
>>> {'h', 'o', 'e', 'l'}

使用add往集合中添加元素,集合支持不同类型数据共存

set1 = set()

set1.add(1)
set1.add("a")
set1.add(3.14)

print(set1)

>>> {1, 3.14, 'a'}

此外,使用update也可以完成添加,参数可以是列表,元组,字典等,且支持多个数据同时添加,用逗号隔开即可

set1 = set()
set2 = set()
data1 = [1, 2, 3]
data2 = (4, 5)

set1.update(data1)
set1.update(data2)
set2.update(data1, data2)

print(set1, set2)

>>> {1, 2, 3, 4, 5} {1, 2, 3, 4, 5}

使用remove删除指定元素

set1 = {1, 2, 3}

set1.remove(3)

print(set1)

>>> {1, 2}

当试图删除集合中不存在的元素时会引发错误

set1 = {1, 2, 3}

set1.remove(4)

>>> Traceback (most recent call last):
  File "script.py", line 3, in <module>
    set1.remove(4)
KeyError: 4

Exited with error status 1

换种方式,使用discard方法拥有同样删除功能,但删除不存在的元素时不会引起错误

set1 = {1, 2, 3}

set1.discard(4)

print(set1)

>>> {1, 2, 3}

此外,集合内置方法也支持pop,但其作用是随机删除集合中的元素

set1 = {1, 2, 3}

set1.pop()

print(set1)

>>> {2, 3}

使用clear清空集合中的所有元素,但保留该集合对象

set1 = {1, 2, 3}

set1.clear()

print(set1)

>>> set()

使用-获取集合1中包含而集合2中不包含的元素,即求差集

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1 - set2

print(output)

>>> {1}

使用内置方法difference也可以达到与两个或多个集合求差集的目的

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}

output = set1.difference(set2, set3)

print(output)

>>> {1}

使用difference_update方法用于移除两个或多个集合中重复的元素,与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}

output = set1.difference_update(set2, set3)

print(output)
print(set1)

>>> None
>>> {1}

使用|获取两个集合中包含的所有元素,即求并集

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1 | set2

print(output)

>>> {1, 2, 3, 4}

使用内置方法union也可以达到与单个或多个集合求并集的目的

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}

output = set1.union(set2, set3)

print(output)

>>> {1, 2, 3, 4, 5}

使用&获取两个集合中同时包含的元素,即求交集

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1 & set2

print(output)

>>> {2, 3}

使用内置方法intersection也可以与两个或多个集合求交集

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}

output = set1.intersection(set2, set3)

print(output)

>>> {3}

使用intersection_update方法也能完成该任务,区别是intersection_update 方法直接在原来的集合中添加元素,没有返回值。

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}

output = set1.intersection_update(set2, set3)

print(output)
print(set1)

>>> None
>>> {3}

使用^获取不同时包含于两个集合中的元素

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1 ^ set2

print(output)

>>> {1, 4}

使用内置方法symmetric_difference也可以达到目的,而不支持与多个集合进行操作

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1.symmetric_difference(set2)

print(output)

>>> {1, 4}

使用symmetric_difference_update方法也能完成求补集任务,区别是它直接在原来的集合中操作,没有返回值。

set1 = {1, 2, 3}
set2 = {2, 3, 4}

output = set1.symmetric_difference_update(set2)

print(output)
print(set1)

>>> None
>>> {1, 4}

使用isdisjoint判断两个集合是否包含相同的元素,没有包含则返回 True,否则返回 False

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {5, 6}

output1 = set1.isdisjoint(set2)
output2 = set1.isdisjoint(set3)

print(output1)
print(output2)

>>> False
>>> True

使用issubset判断某集合是否为原始集合的子集,是则返回 True,否则返回 False

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {2, 3}

output1 = set2.issubset(set1)
output2 = set3.issubset(set1)

print(output1)
print(output2)

>>> False
>>> True

使用issuperset判断原始集合是否为某集合的父集,是则返回 True,否则返回 False,注意与前一个方法的区别

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {1, 2}

output1 = set1.issuperset(set2)
output2 = set1.issuperset(set3)

print(output1)
print(output2)

>>> False
>>> True

由于集合是可变的,使用copy完成拷贝

set1 = {1, 2, 3}
set2 = set1
set3 = set1.copy()

set1.add(4)

print(set2)
print(set3)

>>> {1, 2, 3, 4}
>>> {1, 2, 3}

使用in判断某元素是否在集合中,需特别注意,集合是无序且不可重复的,查找元素方式为哈希。即某元素通过哈希计算,位置永远固定(元素顺序不按输入顺序,按哈希位置),通过哈希可一次找到该元素。而列表需逐个遍历,时间复杂度高。

set1 = {1, 2, 3}

if 2 in set1:
    print(True)

>>> True

与列表一样,同样支持遍历

set1 = {1, 2, 3}

for i in set1:
    print(i)

>>> 1
2
3

同时也支持推导式

set1 = {1, 2, 3}

set2 = {i for i in set1}

set3 = {i for i in set1 if i % 2}

print(set2)
print(set3)

>>> {1, 2, 3}
>>> {1, 3}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值